Sql server SQL Server 2012:查找最接近的日期,多个列&;排

Sql server SQL Server 2012:查找最接近的日期,多个列&;排,sql-server,sql-server-2012,compare,datediff,row-number,Sql Server,Sql Server 2012,Compare,Datediff,Row Number,我正在努力寻找从多个列和行中获取最接近值的最佳方法。在下面的代码中,我只从开始日期中获取序列编号,但我还需要知道与@ValidationTime相比,第1行的结束日期是否比开始日期更近 例如,如果@Validationtime是10:10,则第1行是最接近的值,但10:20更接近第2行 最后,我将只处理“最近的插槽”(1行) 我希望我解释得不太混乱。:) 用例。何时检查哪个更近 SELECT ID, StartDate, EndDate, ROW_NUMBER()

我正在努力寻找从多个列和行中获取最接近值的最佳方法。在下面的代码中,我只从
开始日期
中获取
序列
编号,但我还需要知道与
@ValidationTime
相比,第1行的
结束日期
是否比开始日期更近

例如,如果
@Validationtime
是10:10,则第1行是最接近的值,但10:20更接近第2行

最后,我将只处理“最近的插槽”(1行)

我希望我解释得不太混乱。:)


用例。何时检查哪个更近

SELECT  ID, 
    StartDate, 
    EndDate, 
    ROW_NUMBER() OVER ( Partition by  ID
                Order by CASE   WHEN ABS(DateDiff(MINUTE,StartDate,@ValidationTime)) < ABS(DateDiff(MINUTE,EndDate,@ValidationTime))
                        THEN ABS(DateDiff(MINUTE,StartDate,@ValidationTime))
                        ELSE ABS(DateDiff(MINUTE,EndDate,@ValidationTime))
                        END
              ) AS SEQ
FROM    @table
选择ID,
开始日期,
结束日期,
(按ID分区)上的行数()
当ABS(DateDiff(分钟,开始日期,@ValidationTime))小于ABS(DateDiff(分钟,结束日期,@ValidationTime))时,按案例排序
然后是ABS(DateDiff(分钟,开始日期,@ValidationTime))
ELSE ABS(DateDiff(分钟、结束日期、@ValidationTime))
终止
)如下
来自@table

当然可以!案例为什么我没想到呢。非常感谢。
SELECT  ID, 
    StartDate, 
    EndDate, 
    ROW_NUMBER() OVER ( Partition by  ID
                Order by CASE   WHEN ABS(DateDiff(MINUTE,StartDate,@ValidationTime)) < ABS(DateDiff(MINUTE,EndDate,@ValidationTime))
                        THEN ABS(DateDiff(MINUTE,StartDate,@ValidationTime))
                        ELSE ABS(DateDiff(MINUTE,EndDate,@ValidationTime))
                        END
              ) AS SEQ
FROM    @table