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

SQL如何按日期、产品名称及Unit_cost变动分配唯一序列编号

实现方案

核心思路

利用SQL窗口函数判断单价变化再累加得到序列值,仅需2步即可完成:

  • 第一步:按产品分组、过账日升序排序,标记当前行单价与上一行单价是否发生变化,变化标记为1,无变化标记为0
  • 第二步:按产品分组,对上述变化标记做累加求和,得到的结果就是要求的连续序列编号

通用SQL代码(兼容MySQL 8.0+/PostgreSQL/SQL Server等主流数据库)

WITH cost_change_flag AS (
    SELECT 
        *,
        -- 判断当前行单价和上一行是否不同,不同则标记为1
        CASE WHEN Unit_cost != LAG(Unit_cost, 1) OVER (PARTITION BY 产品名称 ORDER BY 过账日 ASC)
             THEN 1 ELSE 0 
        END AS change_flag
    FROM 你的业务表名
)
SELECT 
    *,
    -- 累加变化标记得到序列,首行默认从1开始计数
    SUM(change_flag) OVER (PARTITION BY 产品名称 ORDER BY 过账日 ASC ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) + 1 AS seq_num
FROM cost_change_flag;

使用说明

  • 代码中产品名称、过账日为示例字段名,使用时替换为你表中对应的实际字段名即可
  • 所有计算按产品维度隔离,不同产品的序列互不干扰,严格遵循日期从旧到新的排序规则

提示:如果存在同一天同一产品有多条记录的情况,可以在ORDER BY子句中额外增加主键等唯一字段保证排序稳定性,避免结果随机。

内容的提问来源于stack exchange,提问作者Chandra Prasad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 14:27:03