2014-01-27 65 views
1

我有兩張表格,一張帶有一組投標,另一張帶有對投標進行投票的投票,這兩張投票都加入了唯一ID。LEFT JOIN上的MAX()值

提案開始時,提案表中有一個日期字段,投票有投票時的日期。當投票足夠時,該提案被標記爲「成功」。我想知道平均收到選票需要多少天。

我最初的方法是創建一個查詢,列出了通過左邊最近的一次投票每個提議加入:

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

你忘了'GROUP BY proposals.pr_id'。 – Barmar

回答

1

使用上GROUP BY條款pr_id獲取沒有爲每個建議

試試這個:

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; 
+0

謝謝。我以某種方式有一個概念,GROUP BY將上面的查詢結果分組,而不是影響MAX()的應用方式。偉大的見解。 – uncovery

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;