我需要从表中检索相对于3列的数据,即每个唯一的reservation_Id
和rnoid
对的max和min ID。
这是我尝试过的:
SELECT
R1.*,
R2.Id, R2.Res_Id, R2.rNoid
FROM
dbo.Res_Id R1
LEFT OUTER JOIN
dbo.Res_Id R2 ON R2.rNoid = R1.rNoid
AND (R2.Id > R1.Id --min
OR (R2.Id = R1.Id
AND r2.Res_Id <> r1.Res_Id)
)
-- AND R2.rNoid <> R1.rNoid
WHERE
R2.id IS NULL
ORDER BY
R1.Id
结果:
id Res_Id, rNoid, xxx_x, yyy_x, user_id
-------------------------------------------
1 1 33 5 null 1
2 3 44 0 3 1
3 13 22 0 null 1
4 1 22 2 5 2
5 3 5 0 5 2
6 3 77 1 3 2
我跳过了一些唯一的配对。
答案 0 :(得分:0)
每个唯一的reserve_Id和rnoid对的最大和最小ID。
您似乎想要一个简单的聚合查询:
TARGET
答案 1 :(得分:0)
您可以尝试一下。这将在min(id)
下创建cte
,在max(id)
下创建ct
。之后,您可以轻松获得inner join
上的Res_Id
和
rNoid
获取记录。
; with cte as (
SELECT r.Res_Id, r.rNoid, MIN(r.id) as MinId
FROM dbo.Res_Id R1
GROUP BY r.Res_Id, r.rNoid
),
ct as (
SELECT r.Res_Id, r.rNoid, MAX(r.id) as MaxId
FROM dbo.Res_Id R1
GROUP BY r.Res_Id, r.rNoid
)
SELECT C.Res_Id, C.rNoid, MinId, MaxId FROM CTE AS C INNER JOIN CT AS CT
ON C.Res_Id = CT.Res_Id AND C.rNoid = CT.rNoid