我有一种情况,我需要从地址历史记录表中选择特定日期和时间的当前地址。一些示例记录可能如下:
地址/客户端 JOIN 表 (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 在 2013 年 5 月 17 日的修改日期之后的情况。例如,@dateOfService = '2013-08-01 12:30'。
提前致谢。