sql-server - 如何在SQL中对相邻行进行分组并对数据求和
问题描述
我想对值求和并对 SQL 中的相邻行进行分组,如下所示。我可以知道该怎么做吗?
我现在的代码:
Select ID, Value from Table_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
推荐阅读
- oracle - .Net Core 的 OracleCoherence 库是什么?
- python - Python Datetime 与格式字符串不匹配
- jquery - Jquery - 下一个 IP 地址
- matplotlib - 在 matplotlib 图中更改 y 轴上的数字格式
- c++ - 发件人循环冗余校验码 - 为什么我的代码不起作用?
- java - Spring Scheduler 任务运行多个时区 dateTime
- javascript - 通过 AJAX 将 JSON 对象发布到 ASP.NET Core Web API
- python - 如何发布用 Python 创建的报告
- flutter - Flutter 本地通知引发错误
- python - 有没有办法在 Windows 中引用“ipconfig”文件