mysql中的条件

时间:2019-04-09 08:09:42

标签: 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中捕获所有适合400天保证金的记录,而又不截断来自table_b的正确记录 预期输出:

 #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

2 个答案:

答案 0 :(得分:1)

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

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

GROUP BY Table_b.animalid, milkdate

答案 1 :(得分:1)

使用子选择查询,该查询将返回第一个表中的所有记录以及第二个表中的值。

select animalid as testday_animalid, milkdate, 
(select calvdate as calvdate from lactationmaster where animalid = testday_animalid and calvdate < milkdate order by calvdate desc limit 1) as calvdate
from view_testlact
order by milkdate;