我正在尝试使用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
答案 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;