首页 > 解决方案 > mysql中的条件

问题描述

我正在尝试使用 MySQL 查询遍历记录,请记住,这个过程必须在数据库中进行,所以我不能使用最好的替代方法,那就是 Python。

Table_a

#animalid calvdate lactationid 
animal_A 2015-06-12 1
animal_A 2017-06-10 2
animal_B 2018-08-10 1

Table_b   

 #animalid milkdate morningmilk midmilk eveningmilk

    animal_A 2018-02-16 8 0 8
    animal_A 2016-02-12 12 0 12

我的查询

   SELECT *, calvdate FROM Table_b
    INNER JOIN Table_a ON Table_b.animalid = Table_a.animalid
    WHERE TO_DAYS(milkdate) - TO_DAYS(calvdate)<400
   GROUP BY Table_b.animalid and milkdate

我的查询的输出

#animalid milkdate morningmilk midmilk eveningmilk calvdate
    animal_A 2018-02-16 8 0 8 2015-06-12

如何在不截断 table_b 预期输出的正确记录的情况下从 table_b 中捕获适合 400 天保证金的所有记录:

 #animalid milkdate morningmilk midmilk eveningmilk calvdate
        animal_A 2018-02-16 8 0 8 2015-06-12
        animal_A 2017-02-12 12 0 12 2017-06-10

标签: mysql

解决方案


AND是一个运算符。该表达式Table_b.animalid and milkdate将参数转换为布尔值并采用逻辑合取(始终为 0)。因此,结果中的每一行都在同一个组中,这就是为什么您在结果中只看到一个。

要按多列分组,请使用逗号:

GROUP BY Table_b.animalid, milkdate

推荐阅读