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