Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Dołączenie SQL do skorelowanego podzapytania, w którym tabele są powiązane przez nakładające się zakresy

Możesz to zrobić za pomocą CTE i row_number() .

Pokaz 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

Zasadniczo CTE połączył element i zdarzenie i dodał nową kolumnę dla numeru wiersza i jest podzielony na element.ID. Oto zrzut ekranu, jak to wygląda. Stąd po prostu wybieram rNum =1, która powinna być maksymalną datą zdarzenia dla każdego item.id.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Proste zapytanie w celu uzyskania maksymalnej wartości dla każdego identyfikatora

  2. SQL:Jak uzyskać identyfikator wartości, które właśnie wstawiłem?

  3. Wskazówka dotycząca domyślnej blokady tabeli w SQL Server 2005/2008

  4. Uzyskaj datę utworzenia indeksu z serwera SQL

  5. Wczytaj wiele tabel z relacjami z t-sql do DataSet