我有三张桌子:家庭,选民,门户
每个家庭可以有几个与之相关的选民。每个家庭也可能有几个门关节。
我试图将一个家庭中的所有选民和来自door_knocks表的最后一个门锁的日期汇总在一起,并且我无法找出正确的查询语法。这是我最近的尝试:
SELECT households.hh_id, voters.id
FROM households
INNER JOIN voters ON households.hh_id = voters.hh_id
INNER JOIN ( SELECT MAX(dk.date), dk.hh_id FROM door_knocks dk GROUP BY dk.date) dks
ON dks.hh_id = households.hh_id
WHERE households.street = ?
然而,上述查询为每次敲门提取了一个结果。我只想要从最后一个敲门开始的日期。
答案 0 :(得分:1)
所以,听起来你在概念上希望是一个表格,列出每个家庭敲门的最后日期。 你想加入反对该表并将其与选民和家庭结合起来。
您的查询所做的是为您提供所有日期的表格(按dk.date分组)以及所有住户的每个日期列表。
如果您按hh_id分组,那么您将获得每个给定家庭的最长日期。
SELECT households.hh_id, voters.id, dks.max_date
FROM households
INNER JOIN voters ON households.hh_id = voters.hh_id
INNER JOIN ( SELECT MAX(dk.date) as max_date, dk.hh_id FROM door_knocks dk GROUP BY dk.hh_id dks
ON dks.hh_id = households.hh_id
WHERE households.street = ?