首页 > 解决方案 > SQL中序列中按类别划分的最大值

问题描述

一段时间以来一直试图想出一个解决方案,但没有成功。我正在使用 SQL Server 2012,我想知道如何通过 'id' 和 'cat' 获取列 'row_num_by_cat' 的最大值仅在“cat”列中找到不同的值或在“row_num_by_cat”列中开始新序列之前进行分区。黄色的“new_count_max”列显示了我正在寻找的内容。

您的帮助将不胜感激。

数据样本

标签: sql-servertsql

解决方案


你可以使用MAX(row_num) OVER

WITH cte AS (
  SELECT *,SUM(CASE WHEN row_num > 1 THEN 0 ELSE 1 END) 
         OVER(PARTITION BY id, cat ORDER BY date_col) AS grp
  FROM tab
)
SELECT *, MAX(row_num) OVER(PARTITION BY id, cat, grp) AS new_count_max
FROM cte
ORDER BY id, date_col, cat;

Rextester 演示


推荐阅读