首页 > 解决方案 > 当值更改时重置行号

问题描述

我对在 SQL 中使用 ROW_NUMBER() 相当陌生,并且我希望行号在边距发生变化时从 1 开始。

这种情况有点令人费解,因为我希望行号重置,而不管之前的边距是否相同。以下是我想要实现的目标:

在此处输入图像描述

对上述任何帮助将不胜感激!

标签: sql

解决方案


这是一个间隙和孤岛问题,一种方法使用行数差异法:

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;

推荐阅读