我有一个包含多个日期和主日期(dm)的表。我必须在MS SQL脚本中找到与主日期最接近的日期。在下表中,d1最接近dm。
d1 |d2 |dm |d3 |d4 |d5
2015.05.06 |2015.10.06|2015.05.05|2015.01.06|2015.06.06|2015.08.06
答案 0 :(得分:1)
在SQL Server中,apply
可能是更简单的方法:
select t.*, dd.d as closest_date, dd.dname as closest_date_column
from t cross apply
(select top 1 v.*
from (values (d1, 'd1'), (d2, 'd2'), (d3, 'd3'), (d4, 'd4')) v(d, dname)
order by abs(datediff(day, v.d, t.dm))
) dd;
答案 1 :(得分:1)
试试这个
DECLARE @Tbl TABLE (d1 DATETIME, d2 DATETIME, d3 DATETIME, d4 DATETIME,d5 DATETIME, dm DATETIME)
INSERT INTO @Tbl
SELECT
'2015.05.06',
'2015.10.09',
'2015.01.06',
'2015.06.06',
'2015.08.06',
'2015.05.05'
SELECT
*,
(SELECT TOP 1 A.d
FROM
(
SELECT ABS(DATEDIFF(DAY, T.dm, T.d1)) a, T.d1 d union all
SELECT ABS(DATEDIFF(DAY, T.dm, T.d2)) a, T.d2 d union all
SELECT ABS(DATEDIFF(DAY, T.dm, T.d3)) a, T.d3 d union all
SELECT ABS(DATEDIFF(DAY, T.dm, T.d4)) a, T.d4 d union all
SELECT ABS(DATEDIFF(DAY, T.dm, T.d5)) a, T.d5 d
) A ORDER BY A.a) ClosestDate
FROM
@Tbl T
结果
d1 d2 d3 d4 d5 dm ClosestDate
2015-05-06 2015-10-09 2015-01-06 2015-06-06 2015-08-06 2015-05-05 2015-05-06