如何在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
相关产品推荐
相关产品推荐

