Sql server 选择DISTINCT issue,选择多个预订

Sql server 选择DISTINCT issue,选择多个预订,sql-server,tsql,Sql Server,Tsql,我有两个表tblReservation和tblBooking。tblReservation有一个ID列和一个事件名称列tblBooking有自己的ID列,也有Reservation ID列(外键),然后是EventStart和EventEnd列 基本上,我正在做以下工作: SELECT DISTINCT B1.ReservationID, B1.EventStart, B1.EventEnd, tblReservation.EventName FROM

我有两个表
tblReservation
tblBooking
tblReservation
有一个
ID
列和一个事件名称列
tblBooking
有自己的
ID
列,也有Reservation ID列(外键),然后是EventStart和EventEnd列

基本上,我正在做以下工作:

SELECT DISTINCT 
    B1.ReservationID,
    B1.EventStart,
    B1.EventEnd,
    tblReservation.EventName
FROM        
    tblBooking AS B1 
INNER JOIN
    tblReservation ON B1.ReservationID = tblReservation.ID
WHERE       
    B1.EventEnd = (SELECT MAX(B2.EventEnd)
                   FROM tblBooking AS B2
                   WHERE B2.ReservationID = B1.ReservationID)
我尝试了这个子查询,每次预订只提取一个预订ID。基本上我想要这些结果:

Reservation ID     EventStart    EventEnd     EventName
1                  1/1/18        1/2/18       Event 1
2                  1/2/18        1/3/18       Event 2 
3                  1/4/18        1/6/18       Event 3
相反,我得到的是:

Reservation ID     EventStart    EventEnd     EventName
1                  1/1/18        1/1/18       Event 1
1                  1/2/18        1/2/18       Event 1
2                  1/2/18        1/2/18       Event 2
2                  1/3/18        1/3/18       Event 2 

你能为你的预期结果提供一些样本数据吗?这非常有效,谢谢。我曾想过使用CTE,但是没有考虑过Rover号(分区…)请为您的代码提供一些解释。只有代码的答案很少对任何人有用,通常会被删除。
WITH X AS (
SELECT      
       B1.ReservationID
     , B1.EventStart
     , B1.EventEnd
     , tblReservation.EventName
     , ROW_NUMBER() OVER (PARTITION BY B1.ReservationID ORDER BY B1.[EventEnd] DESC) rn
FROM        tblBooking AS B1 
INNER JOIN  tblReservation ON B1.ReservationID = tblReservation.ID
)
SELECT 
       x.ReservationID
     , x.EventStart
     , x.EventEnd
     , x.EventName
FROM X 
WHERE x.rn = 1
select DISTINCT(B1.ReservationID), MIN(B1.EventStart) as EventStart, MAX(B1.EventEnd) as EventEnd, Res.EventName
from tblBooking B1
left join tblReservation Res on Res.ID = B1.ReservationID
GROUP BY B1.ReservationID, Res.EventName