我有一種情況,需要從地址歷史記錄表中選擇當前特定日期和時間的地址。一些樣本記錄可能如下:在日期範圍之外選擇歷史記錄
地址/客戶端連接表(Address_Client_JOIN):
-------------------------
|AddressId | ClientId |
-------------------------
|5 | 8888887 |
-------------------------
|6 | 8888887 |
-------------------------
歷史記錄表(Address_History):
-------------------------------------------------------------------------------------------
|HistoryId | AddressId | AddTypeId | StreetAddress | CreatedDate | ModifiedDate |
-------------------------------------------------------------------------------------------
|1 | 5 | 1 | 123 Home Street| 2013-03-11 21:08 | 2013-04-02 13:18|
-------------------------------------------------------------------------------------------
|2 | 5 | 2 | 456 My Avenue | 2013-03-11 21:08 | 2013-04-08 15:00|
-------------------------------------------------------------------------------------------
|3 | 6 | 1 | 789 Cat Road | 2013-05-17 12:00 | 2013-05-17 12:00|
-------------------------------------------------------------------------------------------
此查詢的要求是,我有獲取@dateOfService落在CreatedDate和ModifiedDate之間以及AddTypeId爲「1」的最早記錄(如果有的話),否則就是任何其他AddTypeId。我迄今創建的查詢是:
SELECT TOP 1 ah.HistoryId, ah.AddTypeId, ah.AddressId, ah.StreetAddress,
ah.CreatedDate, ah.ModifiedDate
FROM Address_Client_JOIN acj WITH (NOLOCK)
INNER JOIN Address_History ah WITH (NOLOCK) ON ah.AddressId = acj.AddressId
WHERE apj.ClientId = @clientId
AND (ah.CreatedDate <= @dateOfService
AND (@dateOfService <= ah.ModifiedDate))
ORDER BY
ah.HistoryId ASC, CASE WHEN ah.AddTypeId = 1 THEN 0 ELSE 1 END
這隻要@dateOfService落在CreatedDate和ModifiedDate之間正常工作。但是,當我在ModifiedDate後面發現@dateOfService時,顯然我什麼也得不到。我需要能夠解釋(使用上述數據)@dateOfService在5/17/2013的ModifiedDate之後的情況。例如,@dateOfService ='2013-08-01 12:30'。
在此先感謝。