2013-10-30 83 views
0

我有一個包含Staion平臺的表格,以及它們何時運行以及何時關閉。 我想知道2010年1月1日至2010年1月31日期間運營的電臺的數量。 右側是我尋找的結果。我用黃色突出顯示了那些不應包含在結果中的內容。這些電臺需要按地點分組。 MAP_id是PK。SQL查詢緩慢變化的維度

,我認爲它應該工作的方式是去的每一行,並檢查開始和結束日期是否落在2010年一月

難道這查詢的工作?

SELECT ... 
FROM ... 
WHERE 
'2010/01/31' between startdate and 
case when enddate is null then Getdate() 
else enddate 
end 

任何幫助將appriciated。

enter image description here

+0

提供了站和位置表的模式將極大地幫助。 –

+0

這是唯一的桌子。這是所有車站信息被保存的地方。位置信息不是什麼。該業務只是知道它爲1-14 – user2343837

回答

0

你的條件是: 「01/01/2010和31/01/2010之間的操作」。我期望在查詢中看到這兩個日期。

這是一個重疊時間間隔問題的例子。這是說,該電臺在2010年1月1日或之前開始,並於2010年1月31日或之後結束。這裏是where條款爲邏輯:

where startdate <= '2010-01-01' and 
     (enddate is null or enddate >= '2010-01-31'); 

注意,邏輯可能會略有不同,這取決於端點是否包括或不。

你也可以寫爲:

where startdate <= '2010-01-01' and 
     coalesce(enddate, getdate()) >= '2010-01-31'); 
+0

哇!謝謝!我得到了與上面我的WHERE子句一樣的結果。你認爲我建立它的方式有什麼問題嗎?我仍然在學習代碼,我想改進。 – user2343837

+0

@ user2343837。 。 。如您所述,這是一個緩慢變化的方面。該月底可用的電臺可用於整個月 - 因此數據掩蓋了您的查詢僅查看一天的事實。 –