SQL Server 2012:找到最近的日期,多列和行
问题描述:
我很努力寻找最佳方式来从多个列和行中获得最接近的值。在下面的代码中,我只能得到StartDate
中的SEQ
号码,但我还需要知道第1行的EndDate
与@ValidationTime
相比是否比起始日期更近。SQL Server 2012:找到最近的日期,多列和行
例如,如果@Validationtime
是10:10,第1行是最接近的值,但10:20更接近第2行。
最后,我将只处理“最接近的时隙”(1行)。
我希望我能以不太杂乱的方式解释它。 :)
DECLARE @ValidationTime as datetime
SET @ValidationTime = '2017-08-29 10:10:00.000'
--SET @ValidationTime = '2017-08-29 10:20:00.000'
DECLARE @table TABLE (ID INT, StartDate datetime, EndDate datetime);
INSERT INTO @table
VALUES (1, '2017-08-29 08:00:00.000', '2017-08-29 10:00:00.000'),
(1, '2017-08-29 10:30:00.000', '2017-08-29 21:00:00.000'),
(1, '2017-08-30 08:00:00.000', '2017-08-30 10:00:00.000'),
(1, '2017-08-30 19:00:00.000', '2017-08-30 21:00:00.000');
SELECT
ID, StartDate, EndDate,
ROW_NUMBER() OVER (PARTITION BY ID ORDER BY ABS(DATEDIFF(MINUTE, StartDate, @ValidationTime))) AS SEQ
FROM
@table
答
使用CASE。 。什么时候检查哪个更近
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
是的,当然!案件!我为什么没有想到这一点。谢谢! – Andreas