2013-06-12 55 views
0

我需要填寫缺失的日期和最後一個可用值,因此我將繼續第一步查詢所有日期,包括每日表中缺少的日期。我知道有很多關於填寫缺失日期的問題,但是在這裏我需要該查詢的where子句。 人們通常會建議使用所有日期的單獨表格,然後使用與其他表格的左連接來獲取所有日期,而對於缺少的值,您可以獲得NULL,這很好。查詢中的where子句包含範圍內的所有日期

所以我創建了一個表,並把它稱爲日曆,並嘗試此查詢:

SELECT d.`date`, s.`item`, s.state 
FROM calendar d LEFT JOIN daily_states s 
ON d.`date` = s.`date` 
WHERE s.`item` = 'item1' 
ORDER BY s.`date` ASC; 

希望我得到的結果(例1):

Date  | Item | State 

2013-05-01 item1 state1 
2013-05-02 item1 state1 
2013-05-03 NULL NULL 
2013-05-04 item1 state3 
2013-05-05 NULL NULL 
2013-05-06 item1 state3 
2013-05-07 item1 state1 

我在哪裏項確保只有NULL值實際上是item1,但右表缺少日期。這樣,我以後可以填補缺失與以前的狀態的項目和國家的價值觀和對這個結果結束(例2):

2013-05-01 item1 state1 
2013-05-02 item1 state1 
2013-05-03 item1 state1 
2013-05-04 item1 state3 
2013-05-05 item1 state3 
2013-05-06 item1 state3 
2013-05-07 item1 state1 

但由於WHERE子句中,我得到這個(結果):

2013-05-01 item1 state1 
2013-05-02 item1 state1 
2013-05-04 item1 state3 
2013-05-06 item1 state3 
2013-05-07 item1 state1 

所以我仍然沒有錯過日期。如何在example1中獲得結果? 順便說一句,我做了SQLfiddle與例子。 Thx提前!

回答

1

也檢索NULL值:

where條款

SELECT d.`date`, s.`item`, s.state 
FROM calendar d LEFT JOIN daily_states s 
ON d.`date` = s.`date` 
WHERE s.`item` = 'item1' OR s.item IS NULL 
ORDER BY d.`date` ASC; 

的方式添加

OR s.item IS NULL 

我會通過d.date訂貨,不s.date(可能爲null )

SqlFiddle

+0

thx Raphael!那是我想要的結果。 –

+0

@BojanKovacevic不客氣。 –

相關問題