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

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_datecountrycustomer
2020-04-10DEuser_01
2020-04-18DEuser_02
2020-04-22DEuser_03
2020-05-18DEuser_04
2020-05-28DEuser_05
2020-06-10ATuser_06
2020-06-23ATuser_07

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 15:36:05