sql >> Databáze >  >> RDS >> Sqlserver

T-SQL - SELECT podle nejbližšího data a GROUPED BY ID

můžete to zkusit.

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
;

Neuvedli jste, jak chcete naložit s případem, kdy více řádků ve skupině LinkedID představuje nejblíže cílovému datu. Toto řešení bude obsahovat pouze jeden řádek A v tomto případě nemůžete zaručit, který řádek z více platných hodnot je zahrnut.

Pokud chcete zahrnout všechny řádky, které představují nejbližší hodnotu, můžete v dotazu změnit ROW_NUMBER() pomocí RANK().



  1. Optimalizujte dotaz MySQL UPDATE, který obsahuje WHERE a ORDER BY?

  2. Row Goals, část 3:Anti Joins

  3. Seskupení podle data, návratový řádek, i když nebyly nalezeny žádné záznamy

  4. Jak opravit chybu Parse:chyba syntaxe, neočekávané 'echo' (T_ECHO) v PHP při spuštění výběrového dotazu z MySql