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

SQL join til korreleret underforespørgsel, hvor tabeller er relateret af overlappende områder

Du kan gøre dette ved at bruge en CTE og row_number() .

SQL Fiddle Demo

;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

Grundlæggende har CTE sluttet sig til element og begivenhed og tilføjet en ny kolonne for rækkenummer og er opdelt på item.ID. Her er et skærmbillede af, hvordan det ser ud. Herfra vælger jeg bare rNum =1, som skal være den maksimale begivenhedsdato for hvert item.id.



  1. Mærkelig adfærd med mysql_affected_rows() i PHP

  2. Problemer med at bruge MS Access som front-end til en MySQL-database-backend?

  3. Import af større SQL-filer til MySQL

  4. MySQL Connector C++ 64bit build fra kilde i Visual Studio 2012