如何对相邻行进行分组并对 SQL 中的数据求和
How to group adjacent row and sum the data in SQL
我想对值求和并将 SQL 中的相邻行分组,如下所示。我可以知道该怎么做吗?
我现在的代码:
Select ID, Value from Table_1
进一步的问题
这个怎么样?
这是典型的缺口孤岛问题。
作为初学者:请记住 SQL tables 表示无序的行集。因此,要解决您的问题,您需要一个列来定义 table 中的行顺序 - 我假设 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
我想对值求和并将 SQL 中的相邻行分组,如下所示。我可以知道该怎么做吗?
我现在的代码:
Select ID, Value from Table_1
进一步的问题
这个怎么样?
这是典型的缺口孤岛问题。
作为初学者:请记住 SQL tables 表示无序的行集。因此,要解决您的问题,您需要一个列来定义 table 中的行顺序 - 我假设 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