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

如何在SQL中获取每个User_id对应的首条数据?

获取每个User_id对应的首条Payment数据

根据你的需求,要获取每个User_id对应的首条Payment记录(以id最小的记录为准,匹配你的示例输出),可以用以下几种常见SQL实现方式:

方法1:使用窗口函数ROW_NUMBER()

适用于支持窗口函数的数据库(如MySQL 8.0+、PostgreSQL、SQL Server等):

SELECT id, User_id
FROM (
    SELECT 
        id, 
        User_id,
        ROW_NUMBER() OVER (PARTITION BY User_id ORDER BY id ASC) AS rn
    FROM payment
) t
WHERE rn = 1;

逻辑说明:通过PARTITION BY User_id按用户分组,ORDER BY id ASC确保每组内按id升序排序,ROW_NUMBER()给每组记录编号,取编号为1的就是每组首条记录。

方法2:子查询获取最小id后关联

针对不支持窗口函数的低版本数据库(如MySQL 5.x):

SELECT p.id, p.User_id
FROM payment p
INNER JOIN (
    SELECT User_id, MIN(id) AS min_id
    FROM payment
    GROUP BY User_id
) t ON p.User_id = t.User_id AND p.id = t.min_id;

逻辑说明:先通过子查询分组找出每个User_id对应的最小id,再关联原表获取对应完整记录。

方法3:GROUP BY结合MIN()(仅需id和User_id时)

如果只需要输出这两个字段,可直接分组查询:

SELECT MIN(id) AS id, User_id
FROM payment
GROUP BY User_id
ORDER BY id ASC;

逻辑说明:按User_id分组,取每组最小的id,直接得到目标结果集。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 03:47:11