You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle中如何用OVER(PARTITION BY)实现分组切换时计数重置

Oracle 连续分组计数及带Colspan的HTML表格实现

正确的窗口函数写法

要实现连续grp分组的行数统计(切换分组时计数重置为1),核心是先识别连续的同一grp组,再基于该组生成计数。可以通过两个ROW_NUMBER()的差值来标记连续分组,具体SQL如下:

SELECT 
    row,
    grp,
    pdate,
    ROW_NUMBER() OVER(PARTITION BY grp, grp_group ORDER BY pdate) AS count
FROM (
    SELECT 
        row,
        grp,
        pdate,
        -- 计算行号差,相同差值表示连续的同一grp组
        ROW_NUMBER() OVER(ORDER BY pdate) - ROW_NUMBER() OVER(PARTITION BY grp ORDER BY pdate) AS grp_group
    FROM your_table -- 替换为你的表名
) t
ORDER BY pdate;

逻辑说明

  1. 内层查询中:
    • ROW_NUMBER() OVER(ORDER BY pdate):按pdate全局生成行号
    • ROW_NUMBER() OVER(PARTITION BY grp ORDER BY pdate):按grp分区后生成行号
    • 两者的差值grp_group会为连续的同一grp行分配相同的值,分组切换时差值变化
  2. 外层查询基于grp和grp_group分区,用ROW_NUMBER()生成每组内的连续计数,实现分组切换时计数重置为1的效果

带Colspan属性的示例HTML表格

假设原表数据按pdate排序后生成的结果,对应的合并grp列的HTML表格如下:

row grp pdate COUNT
1 A 2024-01-01 1
2 2024-01-02 2
3 B 2024-01-03 1
4 2024-01-04 2
5 2024-01-05 3
6 A 2024-01-06 1

内容的提问来源于stack exchange,提问作者Chami J

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 22:47:30