sql >> Database >  >> RDS >> Sqlserver

T-SQL - SELECTEER op dichtstbijzijnde datum en GEGROEPEERD OP ID

je kunt dit proberen.

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
;

U heeft niet aangegeven hoe u wilt omgaan met het geval waarbij meerdere rijen in een LinkedID-groep het dichtst bij de streefdatum staan. Deze oplossing zal slechts één rij bevatten. In dit geval kunt u niet garanderen welke rij van de meerdere geldige waarden is opgenomen.

U kunt ROW_NUMBER() wijzigen met RANK() in de query als u alle rijen wilt opnemen die de dichtstbijzijnde waarde vertegenwoordigen.



  1. MySQL hoe waarde laten verlopen?

  2. Complexe WHERE-clausules met behulp van de PHP-doctrine ORM

  3. logica in HAVING-clausule om meerdere waarden van een groep op resultaat te krijgen

  4. Hoe een tabel bijwerken met een selecte groep door in een tweede en zichzelf als de gegevensbron in MySQL?