想象我有兩個表(請參見圖片)。在一個我有日期,另一個我有一個在第一個日期的計數。SQL連接不完整表
我需要加入這些表,所以我有表中的每個日期日期最新的計數(截至該日期)。 例如,對於[日期]。[日期] = 3,我沒有[Counts]。[Count],所以我必須計算[日期] = 1。
在SQL中這樣做的最好方法是什麼?
我希望你能理解我:)
謝謝!!
想象我有兩個表(請參見圖片)。在一個我有日期,另一個我有一個在第一個日期的計數。SQL連接不完整表
我需要加入這些表,所以我有表中的每個日期日期最新的計數(截至該日期)。 例如,對於[日期]。[日期] = 3,我沒有[Counts]。[Count],所以我必須計算[日期] = 1。
在SQL中這樣做的最好方法是什麼?
我希望你能理解我:)
謝謝!!
您可以使用LEFT JOIN
做到這一點;使用一個額外的左連接與空檢查,以確保沒有新的匹配日期;
SELECT d.`date`, c.`count`
FROM dates d
LEFT JOIN counts c ON d.`date` >= c.`date`
LEFT JOIN counts c2 ON d.`date` >= c2.`date` AND c.`date`<c2.`date`
WHERE c2.`date` IS NULL;
你也可以做到這一點使用一個相關子查詢:
select d.date,
(select c.count
from counts c
where d.date >= c.date
order by c.date desc
limit 1
) as count
from dates d;
這甚至應該是比較有效的,如果你在counts(date, count)
有一個索引。
你能提供結構和樣品數據嗎?也許在http://sqlfiddle.com – Kris
這不能既是mysql和sql server。這是什麼? – Hogan
使用WINDOW函數lead()加上一個聚合SUM()BTW:date是一個保留字(typename),所以count(聚合函數)對於mysql(它缺少WINDOW函數),你必須使用使用MAX()和/或NOT EXISTS進行自連接。 – joop