赞
踩
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
提示:这里可以添加本文要记录的大概内容:
我们在Oracle中,经常会出现这样的数据:
用户名 | 密码 | 修改时间 |
---|---|---|
user1 | abcd1 | 2022-06-09 00:00:00 |
user1 | abcd2 | 2022-06-08 00:00:00 |
user1 | abcd3 | 2022-06-07 00:00:00 |
user2 | abcd1 | 2022-06-09 00:00:00 |
user2 | abcd2 | 2022-06-08 00:00:00 |
user2 | abcd3 | 2022-06-07 00:00:00 |
user3 | abcd1 | 2022-06-09 00:00:00 |
user3 | abcd2 | 2022-06-08 00:00:00 |
user3 | abcd3 | 2022-06-07 00:00:00 |
那么,如果我们要取出每个用户的最新密码,就会使用到row_number\partition by
提示:以下是本篇文章正文内容,下面案例可供参考
row_number 就是为了赋予每一行一个序号,序号从1开始递增
select
a.* ,
row_number() over (
order by 修改时间 desc
) as 序号
from 表名 as a
效果:
用户名 | 密码 | 修改时间 | 序号 |
---|---|---|---|
user1 | abcd1 | 2022-06-09 00:00:00 | 1 |
user2 | abcd1 | 2022-06-09 00:00:00 | 2 |
user3 | abcd1 | 2022-06-09 00:00:00 | 3 |
user1 | abcd2 | 2022-06-08 00:00:00 | 4 |
user2 | abcd2 | 2022-06-08 00:00:00 | 5 |
user3 | abcd2 | 2022-06-08 00:00:00 | 6 |
user1 | abcd3 | 2022-06-07 00:00:00 | 7 |
user2 | abcd3 | 2022-06-07 00:00:00 | 8 |
user3 | abcd3 | 2022-06-07 00:00:00 | 9 |
我们在代码中加入partition by
select
a.* ,
row_number() over (
partition by 用户名 order by 修改时间 desc
) as 序号
from 表名 as a
效果:
用户名 | 密码 | 修改时间 | 序号 |
---|---|---|---|
user1 | abcd1 | 2022-06-09 00:00:00 | 1 |
user1 | abcd2 | 2022-06-08 00:00:00 | 2 |
user1 | abcd3 | 2022-06-07 00:00:00 | 3 |
user2 | abcd1 | 2022-06-09 00:00:00 | 1 |
user2 | abcd2 | 2022-06-08 00:00:00 | 2 |
user2 | abcd3 | 2022-06-07 00:00:00 | 3 |
user3 | abcd1 | 2022-06-09 00:00:00 | 1 |
user3 | abcd2 | 2022-06-08 00:00:00 | 2 |
user3 | abcd3 | 2022-06-07 00:00:00 | 3 |
通过row_number / partition by ,我们已经将这些数据,按照用户名进行分组,且在每组用户名中,以倒序对修改时间进行了排序,并将每组内的记录赋予了相应的序号。
最后,我们只需要再加入筛选条件,就可以把最新修改的密码筛选出来
select * from
(
select
a.* ,
row_number() over (
partition by 用户名 order by 修改时间 desc
) as 序号
from 表名 as a
) as t
where 序号 = 1
同样,你可以用下面的with 方法,将添加排序的数据命名成表名
with t as(
select
a.* ,
row_number() over (
partition by 用户名 order by 修改时间 desc
) as 序号
from 表名 as a
)
select * from t where 序号 = 1
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。