我有两个表,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