查找目标日期列中哪两个日期

时间:2014-08-08 15:41:37

标签: sql sql-server tsql

有一张桌子,我正在尝试清理,无法弄清楚如何找到一个日期落在实际列中两个日期之间的记录

TargetDateTime         Location      TransferDateTime

01/01/2014 1:00 PM     Room 1        01/01/2014 10:00 AM
01/01/2014 1:00 PM     Room 2        01/01/2014 12:30 PM
01/01/2014 1:00 PM     Room 3        01/01/2014 01:30 PM
01/01/2014 1:00 PM     Room 4        01/01/2014 03:00 PM

TransferDateTime标记一个人被移动到房间的时间 TargetDateTime标记一个人所做的事件。

在此示例中,TargetDateTime是下午1:00;因此,活动在2号房间进行,因为下午1点到12点30分到1点30分。 SQL中选择该行而忽略其余行的最佳方法是什么?

非常感谢任何建议!

1 个答案:

答案 0 :(得分:3)

根据您的示例数据并猜测您拥有相同TargetDateTime的群组,以下内容应该这样做。

;WITH MyCTE AS
(
    SELECT  TargetDateTime,
            Location,
            TransferDateTime
            ROW_NUMBER() OVER (PARTITION BY TargetDateTime ORDER BY TransferDateTime) AS rn
    FROM    TableName
    WHERE   TransferDateTime >= TargetDateTime 
)
SELECT * 
FROM   MyCTE 
WHERE  rn = 1