【问题标题】:How to group adjacent row and sum the data in SQL如何在SQL中对相邻行进行分组并对数据求和
【发布时间】:2026-02-17 00:10:01
【问题描述】:

我想对值求和并对 SQL 中的相邻行进行分组,如下所示。我可以知道该怎么做吗?

我现在的代码:

Select ID, Value from Table_1 

另一个问题

这个怎么样?

【问题讨论】:

  • 请阅读this,了解一些改进问题的技巧。

标签: sql-server tsql group-by window-functions gaps-and-islands


【解决方案1】:

这是一个典型的差距和孤岛问题。

首先:请记住,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

【讨论】:

  • 当我有 2 个用户时,我可以知道如何修改代码吗?您可以参考进一步的截图