LEFT JOIN上的MAX()值

时间:2014-01-27 05:59:51

标签: mysql sql select group-by datediff

我有两个表格,一个包含一组提案,另一个在提案上投票,两者都加入了唯一的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中执行此操作,还是需要进行子查询?

2 个答案:

答案 0 :(得分:1)

使用 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;

答案 1 :(得分:1)

如果你想要多行,你应该使用GROUP BY,因为聚合函数总是只返回一行。您将通过GROUP BY参数获得多行结果,例如GROUP BY proposals.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;