sql >> Databasteknik >  >> RDS >> Sqlserver

SQL-koppling till korrelerad underfråga där tabeller är relaterade till överlappande intervall

Du kan göra detta med en CTE och 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

I grund och botten har CTE sammanfogat objekt och händelse och lagt till en ny kolumn för radnummer och är uppdelad på item.ID. Här är en skärmdump av hur det ser ut. Härifrån väljer jag bara rNum =1 som ska vara det maximala händelsedatumet för varje item.id.



  1. Så här ändrar du språket för din Oracle-session

  2. Flytta data från en MySQL-tabell till en annan

  3. Behöver ditt företag en HR-databas?

  4. SQL-fråga- Uppdatera om det finns, infoga något annat