簡體   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