2015-11-24 31 views
0
滿足特定條件的值

有一個表OrderingDatetimestamp作爲列。獲取指示條目是否在SQL

OrderingDate (Id, Timestamp, [other columns...])

我希望得到一個布爾值,指示是否有特定的時間範圍內的任何訂貨日期或不是,例如從01-01-2015 00:0001-01-2015 23:59。具體條目根本不相關,只有價值是必要的。不幸的是,我需要用於列舉時間範圍的信息,例如是否有任何訂購日期爲01-01-2015,06-04-2015,09-09-2015(各自爲時間範圍)等。

的時間範圍必須不與正常的天,例如相關從01-01-2015 02:0002-01-2015 01:59也必須得到支持。時間範圍不得連續(時間範圍之間的間隔是可能的)。

什麼是與解決問題的最佳性能的SQL查詢?

我目前的解決方案(每個時間段一個查詢)是大表非常慢(100,000項+):|。

我使用實體框架(V6)來訪問數據庫。如果框架提供瞭解決問題的好方法,請分享。爲了測試,我會使用T-SQL。

回答

0

不知道什麼叫「時間範圍不能連貫」的意思。

空意味着它不存在

declare @dates table (dateStart datetime, dateEnd datetime); 
insert into @dates values (2000-01-01, 2000-01-02) 
         , (2000-01-01, 2000-01-02) 
         , (cast('2011-10-28 12:26:00' as datetime), cast('2011-10-28 12:26:00' as datetime)); 
select docSVsys.sID, docSVsys.addDate, [@dates].dateStart 
from docSVsys 
left join @dates 
    on docSVsys.addDate >= [@dates].dateStart 
and docSVsys.addDate <= [@dates].dateEnd; 
+0

「如果你打算使用一個表變量的話,我建議你還是聲明一個主鍵 - 飛盤」,除非它只是樣本數據來說明一個點。 – HABO

+0

@HABO說明一個觀點?你有什麼http://stackoverflow.com/questions/33883092/do-i-need-to-rewrite-the-case-statement-for-every-field/33885426#comment55542881_33885426發佈爲答案和替代帶有聲明主鍵的temp在這個問題中,聲明的PK將是一個更有效的連接,因爲它知道要停止。在這個問題與不平等的範圍是不一樣的。這不僅僅是爲了說明一個觀點 - 我認爲這是一個完整的答案。 – Paparazzi

+0

我已經更新了這個問題來解釋一致性:「時間範圍不能是連續的(時間範圍之間的間隔是可能的)」。明天我會嘗試解決方案。 – CGX106