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

SQL技术问题:为同一客户同一商品的联系记录按日期生成计数列

解决方案:生成按日期递增的客户-商品联系计数列

你的需求是为同一客户+同一商品(attached_to字段)的联系记录生成按日期递增的序号,但当前SQL使用COUNT() OVER()得到的是该组合的总记录数,而非逐行递增的计数器。

问题原因

原SQL中COUNT(MergedID) OVER (PARTITION BY MergedID)的作用是统计每个Customer-attached_to分组内的总记录数,因此该分组下的所有行都会显示同一个数值,无法实现按日期排序的递增计数。

修正后的SQL

使用ROW_NUMBER()窗口函数,结合分区和排序条件即可实现需求:

SELECT
    CONCAT(Customer, '-', attached_to) AS MergedID,
    Customer,
    record,
    purchasedate,
    attached_to,
    -- 按客户和商品分区,按购买日期排序生成递增序号
    ROW_NUMBER() OVER (PARTITION BY Customer, attached_to ORDER BY purchasedate) AS ContactCount
FROM 
    table1

可选函数说明

如果存在同一客户+同一商品在同一天有多条记录的场景,可以根据需求选择不同的窗口函数:

  • ROW_NUMBER():即使日期相同,也会生成唯一的递增序号(比如同一天的两条记录会是1、2)
  • RANK():同一日期的记录会得到相同序号,后续序号会跳过(比如同一天两条记录都是1,下一条是3)
  • DENSE_RANK():同一日期的记录会得到相同序号,后续序号不会跳过(比如同一天两条记录都是1,下一条是2)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 23:02:14