sql - 当值更改时重置行号
问题描述
我对在 SQL 中使用 ROW_NUMBER() 相当陌生,并且我希望行号在边距发生变化时从 1 开始。
这种情况有点令人费解,因为我希望行号重置,而不管之前的边距是否相同。以下是我想要实现的目标:
对上述任何帮助将不胜感激!
解决方案
这是一个间隙和孤岛问题,一种方法使用行数差异法:
WITH cte AS (
SELECT *, ROW_NUMBER() OVER (PARTITION BY CAMPAIGN_NAME ORDER BY DATE DESC) rn1,
ROW_NUMBER() OVER (PARTITION BY CAMPAIGN_NAME, MARGIN ORDER BY DATE DESC) rn2
FROM yourTable
)
SELECT CAMPAIGN_NAME, DATE, MARGIN, REVENUE,
ROW_NUMBER() OVER (PARTITION BY CAMPAIGN_NAME, MARGIN, r1 - r2
ORDER BY DATE DESC) AS RN
FROM cte
ORDER BY
CAMPAIGN_NAME,
DATE DESC;
推荐阅读
- angular - 如何使用量角器打字稿单击并一一选择选项下拉列表中的所有项目
- python - Tkinter GUI 有输入但是当我添加变量时数据库是空的
- cassandra - 设置 disk_optimization_strategy 到底有什么作用?
- angular - 测试订阅服务
- c# - 调整图像的字节[]
- java - 使用 Java 从托管服务器向本地 PC 发起 HTTP 调用
- variables - 如何在 JMeter 中获取线程和采样器名称
- image-processing - scikit-image 库中 resize 函数中的参数模式如何工作?
- c# - 从给定的 CT 图像计算不同的轴
- laravel - Laravel Cashier (Stripe) - createAsStripeCustomer 函数抛出错误