2015-10-05 143 views
0

MSSQL 2008R2TSQL查詢歷史記錄表MSSQL2008r2

我想要查詢存儲變化的開始和結束日期表,我想返回兩個日期之間的所有行,一個@StartDate和和@EndDate 。

這裏的示例表架構

CREATE TABLE dbo.History(
    cKey INT NOT NULL 
    ,vKey INT NOT NULL 
    ,CreateDate DATETIME NOT NULL 
    ,DeletedTime DATETIME NULL 
) 

所以我的查詢需要包括行,其中的[CREATEDATE]是< = @StartDate但其中發現的[DeletedTime] IS NULL,也當[CREATEDATE]是< = @StartDate和[DeletedTime]是< @EndDate。

由於[DeletedTime]列可以爲空,所以[DeletedTime]爲空的那些行仍然是當前/活動的。

以下SQL不起作用。僅返回[DeletedTime]爲空的行,即活動行。不包括那些在@StartDate和@EndDate之間刪除的行

SELECT * FROM dbo.History 
WHERE @StartDate >= CreateDate 
AND @EndDate <= ISNULL(DeletedTime, '2099-12-12 23:59:59') 

任何想法的專家? 提前謝謝。

回答

1

我認爲你正在尋找這個

WHERE (CreateDate <= @StartDate AND [DeletedTime] IS NULL) 
    OR ([CreateDate] <= @StartDate and [DeletedTime] < @EndDate) 
+0

謝謝,但此函數返回行,其中的[DeletedTime]是@StartDate –

+0

之前這似乎已經做到了。 WHERE((CreateDate <= @StartDate AND DeletedTime IS NULL) \t OR(CreateDate <= @StartDate和DeletedTime BETWEEN @StartDate AND @EndDate)) ' –

+0

@Mountaineer:啊..很好! – DarkKnight