首页 > 解决方案 > 在不修改表的情况下,在 SQL SELECT 语句中对行进行分组并添加序列号

问题描述

假设我们有一个这样的表:

日期 用户 物品
2021-01-01 一个 X
2021-01-05 一个
2021-01-11 一个 Z
2021-01-01 X
2021-01-16
2021-01-01 C X
2021-01-02 C
2021-01-03 C Z
2021-01-10 D X
2021-01-15 D

我想按日期和项目对每个用户进行分组,并在查询期间添加序列号,而不是通过修改表。对于用户,第一个日期的项目的序列号应该是第一个。对于每个新用户,该数字应该重新开始。我想检索这样的数据:

日期 用户 物品 序列
2021-01-01 一个 X 1
2021-01-05 一个 2
2021-01-11 一个 Z 3
2021-01-01 X 1
2021-01-16 2
2021-01-01 C X 1
2021-01-02 C 2
2021-01-03 C Z 3
2021-01-10 D X 1
2021-01-15 D 2

可能吗?我可以检索这样的数据吗?

谢谢!

标签: sqldatabase

解决方案


这是做什么row_number()的:

select t.*,
       row_number() over (partition by user order by date) as seqnum
from t;

推荐阅读