繁体   English   中英

如何加入具有最大值的行

[英]How to join on a row with max value

我有三张表:家庭、选民、door_knocks

每个家庭可以有几个与之相关的选民。 每个家庭还可以有几次与之相关的敲门声。

我正在尝试将一个家庭中的所有选民和 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 = ?

然而,上面的查询会为每次敲门拉出一个结果。 我只想要最后一次敲门的日期。

因此,听起来您在概念上希望的是一个表格,其中列出了每个家庭敲门的最后日期。 你想加入反对那张桌子并将它与选民和家庭结合起来。

您的查询所做的是为您提供所有日期的表格(按 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 = ?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM