Ted*_*erz 6 sql-server aggregate
假设我有一个名为 dbo.GroupAssignment 的表。
组ID | 秩 ------------------ 1 1 1 2 1 3 2 1 2 3 2 4 3 2 3 4 3 5
PK是GroupID,Rank。通常,组内的等级是从 1 开始的连续整数序列。但是 GroupAssignment 可能会被删除,留下一个间隙。当为小组做出新的分配时,我想填补第一个可用的空白。
那么,我如何在 SQL Server 中计算它呢?
您可以使用 ROW_NUMBER 生成排名应该是什么
;WITH ranks AS
(
SELECT
GroupID, Rank,
ROW_NUMBER() OVER (PARTITION BY GroupID ORDER BY Rank) AS newRank
FROM
dbo.GroupAssignment
)
SELECT
GroupID, MIN(newRank), MIN(Rank)
FROM
ranks
WHERE
newRank < Rank -- don't need <> here
GROUP BY
GroupID;
Run Code Online (Sandbox Code Playgroud)
就个人而言,如果其中之一适用,我不会重复使用此排名
另外,您是否希望RANK 或 DENSE_RANK处理“联合第 2 次”或“相等值”而不是 ROW_NUMBER
小智 6
自连接可以解决问题吗?
select MIN(a.rank)+1 from dbo.GroupAssignment a
left join dbo.GroupAssignment b on a.GroupID = b.GroupID AND a.rank+1 = b.rank
where a.GroupID = ? and b.rank is null
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
671 次 |
| 最近记录: |