2017-09-25 32 views
1

我有三个表:家庭,选民,门户如何加入连续最大值

每个家庭可以有几个选民与它相关联。每个家庭也可能有几个与之相关的门铃。

我试图把所有的选民放在一起,并从door_knocks表中找到最后一个door_knock的日期,并且我很难计算出正确的查询语法。这是我最近的一次尝试:

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 = ? 

但是,上面的查询拉出了一个结果。我只想从最后敲门的日期。

回答

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 = ? 
+0

啊,当然!不过,我还有其他问题。实际日期不会显示在结果中。当我尝试将'dk.date','dks.date'或'doork_knocks.date'放入查询的第一部分时,出现未知列。 – StevieD

+1

@StevieD答案更新如果这回答你的问题,请接受答案 –

+0

感谢您的指导。我刚注意到另外一个问题。我想包括没有入场门的家庭。左连接将解决这个问题?我会测试它,但现在我正在使用我的手机。 – StevieD