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
相关产品推荐
相关产品推荐

