繁体   English   中英

LEFT JOIN上的MAX()值

[英]MAX() value on a LEFT JOIN

我有2张桌子,一张桌子有一套提案,一张桌子对提案投了票,两张桌子都有唯一的ID。

提案表在提案开始时有一个日期字段,投票在投票中有一个日期。 如果投票足够,则该提案将标记为“成功”。 我想找出平均需要多少天才能完成投票。

我最初的方法是创建一个查询,该查询通过左连接列出具有最新投票的每个提案:

SELECT proposals.pr_id, DATEDIFF(MAX(proposals_votes.`date`), proposals.`date`)
FROM proposals
LEFT JOIN proposals_votes ON proposals.pr_id = proposals_votes.pr_id
WHERE STATUS = 'success'

问题是,这仅返回一行,这令我感到惊讶。 我本以为MAX是在LEFT JOIN表而不是结果表上完成的。

是否可以在LEFT JOIN中执行此操作,还是需要执行子查询?

使用pr_id上的GROUP BY子句获取每个投标 的天数

尝试这个:

SELECT p.pr_id, DATEDIFF(MAX(pv.`date`), p.`date`)
FROM proposals p 
LEFT JOIN proposals_votes pv ON p.pr_id = pv.pr_id
WHERE pv.status = 'success'
GROUP BY p.pr_id;

如果要多行,则应使用GROUP BY,因为聚合函数始终只返回一行。 您将通过GROUP BY参数(例如GROUP BY proposal.pr_id)获得多行结果。

SELECT 
    proposals.pr_id,
    DATEDIFF(MAX(proposals_votes.date),proposals.date)
FROM
    proposals
        LEFT JOIN
    proposals_votes ON proposals.pr_id = proposals_votes.pr_id
WHERE
    STATUS = 'success'
GROUP BY proposals.pr_id;

暂无
暂无

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

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