我有一個包含多個日期和主日期(dm)的表格。我必須找出MS SQL腳本中主日期的最近日期。在下表中,d1最接近dm。在sql中連續查找特定日期的最近日期
d1 |d2 |dm |d3 |d4 |d5
2015.05.06 |2015.10.06|2015.05.05|2015.01.06|2015.06.06|2015.08.06
我有一個包含多個日期和主日期(dm)的表格。我必須找出MS SQL腳本中主日期的最近日期。在下表中,d1最接近dm。在sql中連續查找特定日期的最近日期
d1 |d2 |dm |d3 |d4 |d5
2015.05.06 |2015.10.06|2015.05.05|2015.01.06|2015.06.06|2015.08.06
在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;
什麼是d。*和t.d?我有d語法錯誤。 – bill
試試這個
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
您只需要日期或信息。另外,如果它是d1還是d4? – Whencesoever
你想要什麼輸出?這些真的存儲在同一行嗎? –
2015.05.06在上述情況下 – bill