有一张桌子,我正在尝试清理,无法弄清楚如何找到一个日期落在实际列中两个日期之间的记录
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中选择该行而忽略其余行的最佳方法是什么?
非常感谢任何建议!
答案 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