sql - 在 SQL 中将重复分组为批次
问题描述
我正在尝试按批次对我的表进行分组,当类型发生变化时,每个批次都结束(下一个开始)。数据按 num 排序。我拥有的数据如下:
type num
-----------------
Agent 1
Agent 2
User 3
User 4
Agent 5
User 6
User 7
我正在寻找添加批号:
type num batch
----------------------
Agent 1 1
Agent 2 1
User 3 2
User 4 2
Agent 5 3
User 6 4
User 7 4
我已经尝试过dense_rank和领先/落后但没有成功提前谢谢!
解决方案
假设num
没有间隙,您可以减去一个序列以获得每个组的常数并使用dense_rank()
:
select t.*,
dense_rank() over (order by num - seqnum, type) as batch_num
from (select t.*, row_number() over (partition by type order by num) as seqnum
from t
) t;
您还可以使用滞后和累积总和:
select t.*,
sum(case when prev_type = type then 0 else 1 end) over (order by num) as batch_num
from (select t.*, lag(type) over (order by num) as prev_type
from t
) t;
推荐阅读
- android - Flutter 表单构建器 - FormBuilderImagePicker
- r - 使用 ggplot2 在 Y 轴上设置 24 小时刻度
- python-3.x - 仅从 Python 中的大文件中读取特定的行号?
- php - NGINX 入口 + Wordpress-fpm = ERR_TOO_MANY_REDIRECTS
- python - 是否可以在 Scrapy 中使用熊猫?
- java - 密钥库证书链长度错误 - 如何以编程方式将整个证书链加载到 Java 密钥库中,以便使用 SSL 身份验证连接到 Kafka?
- java - 有没有办法在程序仍在运行时替换 eclipse 中的输出?
- typescript - ORM 类型的横向连接
- react-redux - redux-oidc 从 keycloak 重定向 - USER_EXPIRED 在 USER_FOUND 之前调用,导致登录屏幕闪烁
- python - py2neo.database.work.ClientError: [Security.Unauthorized] 客户端因认证失败而未授权