我有两个表,A和B,A包含条目列表和B为每个条目多个状态行(0-n,按日期分组,状态为0为好,1失败)。状态表加入多个状态
现在我想从A中选择所有行,分别列出它们各自的最新状态和日期以及最近的故障和日期(故障定义为至少有一个条目为1)。
我试过的东西两个没有加入,但我不认为它是最佳的解决方案,也仍然有问题与确定故障的正确数量(SUM(b2.status))
SELECT a.id, b1.date, SUM(b1.status), b2.date, SUM(b2.status) FROM tablea a
LEFT JOIN tableb b1 ON b1.aid=a.id
LEFT JOIN tableb b2 ON b2.aid=a.id
WHERE (b1.date=(SELECT MAX(`date`) FROM tableb WHERE aid=a.id) OR b1.date IS NULL)
AND (b2.date=(SELECT MAX(`date`) FROM tableb WHERE aid=a.id GROUP BY `date` HAVING SUM(`status`)>0) OR b2.date IS NULL)
GROUP BY a.id
非常感谢。这似乎是诀窍。我的第二次加入显然不完整。 – user1616166
是的,问题是,如果b1返回2行,而b2返回2行,则会得到4行,失败次数会加倍。或者如果你有3行,它可以是三倍,等等。以上,b2只返回一行。 – Tom