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

SQL se připojí ke korelovanému poddotazu, kde jsou tabulky propojeny překrývajícími se rozsahy

Můžete to udělat pomocí CTE a row_number() .

Ukázka SQL Fiddle

;with cte as 
(
    SELECT *,
        ROW_NUMBER() OVER (PARTITION BY i.id ORDER BY e.EventDate DESC) as rNum
    FROM Item i
    JOIN Event e
        ON i.id between e.ItemStart and e.ItemEnd
)

SELECT ID,
  Name, 
  EventType,
  EventDate FROM cte
WHERE rNum = 1

V zásadě CTE spojil položku a událost a přidal nový sloupec pro číslo řádku a je rozdělen na item.ID. Zde je snímek obrazovky, jak to vypadá. Odtud jen vyberu rNum =1, což by mělo být maximální datum události pro každou položku item.id.



  1. Cygnus neuchovává data v databázi MySql

  2. Jak vybrat první řádek pro každou skupinu v MySQL?

  3. Aktualizujte tabulku MySQL pomocí souboru CSV

  4. LIKE dotaz sql nefunguje ve zřetězených hodnotách s mezerou