簡體   English   中英

在SQL中找出最接近日期的特定日期

[英]Find out closest date to a particular date in a row in sql

我有一個包含多個日期和主日期(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

在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;

嘗試這個

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 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM