Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SQL присъединяване към корелирана подзаявка, където таблиците са свързани чрез припокриващи се диапазони

Можете да направите това, като използвате CTE и row_number() .

Демонстрация на 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

По принцип CTE е съединил елемент и събитие и е добавил нова колона за rownumber и е разделен на item.ID. Ето екранна снимка на това как изглежда. От тук просто избирам rNum =1, което трябва да бъде максималната дата на събитие за всеки 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. SQL Server и пропуски в колона за идентичност

  2. Лоша идея ли е да имаш „ИЛИ“ в състояние INNER JOIN?

  3. Текстът е съкратен или един или повече знаци не са съвпадали в целевата кодова страница при импортиране от Excel файл

  4. Нечетен INNER JOIN синтаксис и капсулиране

  5. Масив за съхранение в SQL Server 2008