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

如何按行对各商品Pfit列的+/-值进行条件递增计数?

实现商品分组下Pfit符号的递增计数

你现在需要给每个商品分组,对Pfit列里的+和-分别按行的先后顺序(按日期排序)做递增编号对吧?先结合你的示例数据,明确下期望的输出效果(新增Seq列):

nidNameShipDatePfitSeq
11apple2018-04-14+1
21apple2018-04-15+2
31apple2018-04-16+3
41apple2018-04-17-1
51apple2018-04-18-2
12bread2018-04-14-1
22bread2018-04-15-2
32bread2018-04-16+1
13orange2018-04-14+1
23orange2018-04-15+2
33orange2018-04-16-1
14tomato2018-04-14+1
24tomato2018-04-15-1
34tomato2018-04-16-2

核心解决方案:用窗口函数实现

这类分组计数需求,用SQL的窗口函数是最简洁高效的,推荐用ROW_NUMBER()来实现:

SELECT 
    n,
    id,
    Name,
    ShipDate,
    Pfit,
    -- 按商品+符号分区,按日期排序生成序号
    ROW_NUMBER() OVER (
        PARTITION BY Name, Pfit 
        ORDER BY ShipDate
    ) AS Seq
FROM 
    your_table_name; -- 替换成你的实际表名

代码细节解释

  • PARTITION BY Name, Pfit:先把数据按商品名称分组,再在每个商品组里,把+和-的记录分成两个子组;
  • ORDER BY ShipDate:保证每个子组内的记录是按日期先后顺序排列的,这样序号才是递增的;
  • ROW_NUMBER():在每个子组里,给每条记录分配一个从1开始的连续序号,正好满足你的需求。

特殊情况处理

如果你的表中存在同一商品同一日期有多个相同符号的记录,想要保证序号和原始数据的n列顺序一致,可以把n加入排序条件:

ROW_NUMBER() OVER (
    PARTITION BY Name, Pfit 
    ORDER BY ShipDate, n
) AS Seq

内容的提问来源于stack exchange,提问作者Robin Vlaar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:40:34