sql >> Database >  >> RDS >> Sqlserver

SQL-join naar gecorreleerde subquery waar tabellen zijn gerelateerd door overlappende bereiken

U kunt dit doen met behulp van een CTE en 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

In principe heeft de CTE item en event samengevoegd en een nieuwe kolom toegevoegd voor rijnummer en gepartitioneerd op item.ID. Hier is een screenshot van hoe het eruit ziet. Vanaf hier selecteer ik gewoon rNum =1, wat de maximale evenementdatum zou moeten zijn voor elk item.id.



  1. Hoe u het huidige Auto_Increment-volgnummer voor MySQL / MariaDB-tabel kunt krijgen

  2. Terugkeren van een functie met OUT-parameter

  3. ORA-00604-fout bij het invoegen van batches in TransactionScope

  4. Een overzicht van ProxySQL-clustering in ClusterControl