【发布时间】:2026-02-17 00:10:01
【问题描述】:
我想对值求和并对 SQL 中的相邻行进行分组,如下所示。我可以知道该怎么做吗?
我现在的代码:
Select ID, Value from Table_1
另一个问题
这个怎么样?
【问题讨论】:
-
请阅读this,了解一些改进问题的技巧。
标签: sql-server tsql group-by window-functions gaps-and-islands
我想对值求和并对 SQL 中的相邻行进行分组,如下所示。我可以知道该怎么做吗?
我现在的代码:
Select ID, Value from Table_1
另一个问题
这个怎么样?
【问题讨论】:
标签: sql-server tsql group-by window-functions gaps-and-islands
这是一个典型的差距和孤岛问题。
首先:请记住,SQL 表表示无序的行集。因此,要解决您的问题,您需要一个定义表中行顺序的列 - 我假设为 ordering_id。
这是一种使用row_numbers() 之间的差异来构建具有相同id 的相邻行组的方法:
select
id,
sum(value) value
from (
select
t.*,
row_number() over(order by ordering_id) rn1
row_number() over(partition by id order by ordering_id) rn2
from mytable t
) t
group by id, rn1 - rn2
如果您希望以每个用户为基础:
select
user,
id,
sum(value) value
from (
select
t.*,
row_number() over(partition by user order by ordering_id) rn1
row_number() over(partition by user, id order by ordering_id) rn2
from mytable t
) t
group by user, id, rn1 - rn2
【讨论】: