ROW_NUMBER() 窗口函数(唯一行号)
函数说明
| 函数 |
作用 |
特点 |
| ROW_NUMBER() |
生成行号 |
相同数值也分配连续唯一序号,结果:1,2,3,4 |
实战案例:
数据表 users 用户访问表
| usr_id |
log_date |
| 001 |
2021/5/1 |
| 002 |
2021/5/1 |
| 003 |
2021/5/1 |
| 001 |
2021/5/2 |
| 003 |
2021/5/2 |
| 001 |
2021/5/3 |
| 003 |
2021/5/4 |
建表与测试数据
CREATE TABLE users (
usr_id VARCHAR(10) NOT NULL COMMENT '用户ID',
log_date DATE NOT NULL COMMENT '访问日期'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
INSERT INTO users(usr_id, log_date)
VALUES
('001', '2021-05-01'),
('002', '2021-05-01'),
('003', '2021-05-01'),
('001', '2021-05-02'),
('003', '2021-05-02'),
('001', '2021-05-03'),
('003', '2021-05-04');
基于上面 users 表,取出每个用户最早的 1 条访问记录。
select usr_id,log_date
from(
select usr_id,log_date,ROW_NUMBER() over(
PARTITION by usr_id
ORDER BY log_date asc
)as rank_id
from users
)tem
where rank_id = 1
运行结果
![在这里插入图片描述]()