PostgreSQL如何按国家优先级查询去重的唯一用户首次下单记录
解决方案
可以通过窗口函数按业务规则给每个用户的记录做优先级排序,取每个用户排序后的第一条记录即可实现需求,修改后的SQL如下:
SELECT order_date, country, customer FROM ( SELECT order_date, country, customer, ROW_NUMBER() OVER ( PARTITION BY customer ORDER BY -- 优先取DE国家的记录,DE优先级高于AT CASE WHEN country = 'DE' THEN 1 ELSE 2 END, -- 同一国家下取最早的下单日期 order_date ASC ) AS rn FROM customers ) t WHERE rn = 1 ORDER BY order_date;
运行结果
执行上述SQL后返回的结果完全匹配规则要求:
| order_date | country | customer |
|---|---|---|
| 2020-04-10 | DE | user_01 |
| 2020-04-18 | DE | user_02 |
| 2020-04-22 | DE | user_03 |
| 2020-05-18 | DE | user_04 |
| 2020-05-28 | DE | user_05 |
| 2020-06-10 | AT | user_06 |
| 2020-06-23 | AT | user_07 |
内容的提问来源于stack exchange,提问作者Michi
相关产品推荐
相关产品推荐

