sql >> Databasteknik >  >> RDS >> Sqlserver

T-SQL - VÄLJ efter närmaste datum och GRUPPERAT EFTER ID

du kan prova detta.

DECLARE @Date DATE = '10/01/2010';

WITH cte AS
    (
    SELECT ID, LinkedID, ABS(DATEDIFF(DD, @date, DATE)) diff,
        ROW_NUMBER() OVER (PARTITION BY LinkedID ORDER BY ABS(DATEDIFF(DD, @date, DATE))) AS SEQUENCE
    FROM MyTable
    )

SELECT *
FROM cte
WHERE SEQUENCE = 1
ORDER BY ID
;

Du angav inte hur du vill hantera fallet där flera rader i en LinkedID-grupp representerar det närmaste måldatumet. Den här lösningen kommer bara att inkludera en rad. Och i det här fallet kan du inte garantera vilken rad med flera giltiga värden som ingår.

Du kan ändra ROW_NUMBER() med RANK() i frågan om du vill inkludera alla rader som representerar det närmaste värdet.



  1. Hur kan jag köra många frågor på en sida?

  2. Undviker markörer för att uppdatera många poster med en trigger

  3. Hur man fjärransluter till en MySQL-databas på vår delade server

  4. Kan jag få SQL Server att anropa en lagrad proc var n:e sekund?