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

SQL按creation_date取首行:如何查询每个用户的首个order_id及对应日期

实现方案

以上需求可根据你使用的数据库类型选择以下对应方案,执行后均可得到你预期的查询结果:

方案1:窗口函数法(兼容性最好,支持所有现代SQL数据库)

适用场景:MySQL 8.0+、PostgreSQL、SQL Server、Spark SQL、Hive等支持窗口函数的数据库

SELECT User, order_id, `date`
FROM (
    SELECT 
        User,
        order_id,
        `date`,
        -- 按用户分组,按日期升序排序,日期相同可再加order_id排序保证结果唯一
        ROW_NUMBER() OVER (PARTITION BY User ORDER BY `date` ASC, order_id ASC) AS rn
    FROM user_orders -- 此处替换为你的实际表名
) t
WHERE rn = 1;

方案2:分组关联法(兼容旧版无窗口函数的数据库,如MySQL 5.x)

SELECT t1.User, t1.order_id, t1.`date`
FROM user_orders t1
INNER JOIN (
    -- 先查询每个用户的最早订单日期
    SELECT User, MIN(`date`) AS first_date
    FROM user_orders
    GROUP BY User
) t2 ON t1.User = t2.User AND t1.`date` = t2.first_date
-- 若同一用户同日期有多条订单,加以下逻辑保证只取最小order_id的一条
GROUP BY t1.User, t1.`date`
HAVING t1.order_id = MIN(t1.order_id);

方案3:DISTINCT ON 语法(仅PostgreSQL支持,性能最优)

SELECT DISTINCT ON (User) User, order_id, `date`
FROM user_orders
ORDER BY User, `date` ASC, order_id ASC;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 04:18:04