如何编写SQL获取每个客户-产品组合的最早购买日期?
解决方法:获取每个客户-产品组合的最早购买日期
问题分析
你需要筛选出customer和product的唯一组合,并获取该组合对应的最小purchase-date,之前的窗口函数仅按customer分区,导致结果不符合预期——只拿到了每个客户最早的一条购买记录,而非每个客户+产品组合的最早记录。
两种有效解法
1. 使用GROUP BY聚合查询(最直接)
通过按customer和product分组,利用MIN()函数直接计算每组的最小购买日期:
SELECT customer, product, MIN(purchase-date) AS purchase-date FROM table GROUP BY customer, product ORDER BY customer, product;
这个查询会自动对每个客户-产品组合进行聚合,返回每组的最早购买日期,完全匹配你的需求输出。
2. 修正窗口函数写法
将窗口函数的PARTITION BY字段同时包含customer和product,确保每个客户的每个产品组合都独立排序:
WITH data AS ( SELECT *, ROW_NUMBER() OVER (PARTITION BY customer, product ORDER BY purchase-date) AS rownum FROM table ) SELECT customer, product, purchase-date FROM data WHERE rownum = 1 ORDER BY customer, product;
修改后,每个customer+product组合会被划分为单独的分区,按purchase-date排序后取第一条,就是该组合的最早购买记录。
内容的提问来源于stack exchange,提问作者Vik G
相关产品推荐
相关产品推荐

