2013-08-16 49 views
2

想象我有兩個表(請參見圖片)。在一個我有日期,另一個我有一個在第一個日期的計數。SQL連接不完整表

我需要加入這些表,所以我有表中的每個日期日期最新的計數(截至該日期)。 例如,對於[日期]。[日期] = 3,我沒有[Counts]。[Count],所以我必須計算[日期] = 1。

在SQL中這樣做的最好方法是什麼?

我希望你能理解我:)

謝謝!!

enter image description here

+1

你能提供結構和樣品數據嗎?也許在http://sqlfiddle.com – Kris

+2

這不能既是mysql和sql server。這是什麼? – Hogan

+0

使用WINDOW函數lead()加上一個聚合SUM()BTW:date是一個保留字(typename),所以count(聚合函數)對於mysql(它缺少WINDOW函數),你必須使用使用MAX()和/或NOT EXISTS進行自連接。 – joop

回答

5

您可以使用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; 

An SQLfiddle to test with

1

你也可以做到這一點使用一個相關子查詢:

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)有一個索引。