sql >> Database teknologi >  >> RDS >> Sqlserver

T-SQL - VÆLG efter nærmeste dato og GRUPPERET EFTER ID

du kan prøve dette.

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 har ikke angivet, hvordan du vil håndtere det tilfælde, hvor flere rækker i en LinkedID-gruppe repræsenterer den tætteste på måldatoen. Denne løsning vil kun inkludere én række. Og i dette tilfælde kan du ikke garantere, hvilken række af de flere gyldige værdier der er inkluderet.

Du kan ændre ROW_NUMBER() med RANK() i forespørgslen, hvis du vil inkludere alle rækker, der repræsenterer den nærmeste værdi.



  1. Formatering af et numerisk SQL-forespørgselsresultat med et vilkårligt antal decimaler

  2. Hvordan kan jeg oprette forbindelse til en webbaseret Oracle-database med Java?

  3. Jeg vil bruge CASE-sætning til at opdatere nogle poster i sql server 2005

  4. indstil tom adgangskode for PostgreSQL-bruger