最小和最大自动ID列以及同一表中的其他列

时间:2019-08-18 20:25:03

标签: sql sql-server

我需要从表中检索相对于3列的数据,即每个唯一的reservation_Idrnoid对的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

我跳过了一些唯一的配对。

2 个答案:

答案 0 :(得分:0)

  每个唯一的reserve_Id和rnoid对的

最大和最小ID。

您似乎想要一个简单的聚合查询:

TARGET

答案 1 :(得分:0)

您可以尝试一下。这将在min(id)下创建cte,在max(id)下创建ct。之后,您可以轻松获得inner join上的Res_IdrNoid获取记录。

  ; 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