背景
数据库
PostgreSQL
表
tbl_hos_score
create_time | hospital_name | score |
---|---|---|
2023-08-03 08:20:04 | 广东医院 | 87 |
2023-08-03 12:00:06 | 广东医院 | 87 |
2023-08-04 08:20:09 | 浙江医院 | 84 |
2023-08-04 12:00:17 | 浙江医院 | 84 |
… | … | … |
需求
- 只需保留一家医院一天最近日期的分数
- 时间只保留日期,即只保留年月日
目标
tbl_hos_score
create_time | hospital_name | score |
---|---|---|
2023-08-03 12:00:06 | 广东医院 | 87 |
2023-08-04 12:00:17 | 浙江医院 | 84 |
… | … | … |
SQL
SELECT
create_time,
hospital_name,
score
FROM
(
SELECT
create_time,
hospital_name,
score,
ROW_NUMBER ( ) OVER ( PARTITION BY hospital_name, TO_CHAR( create_time, 'yyyy-mm-dd' ) ORDER BY create_time DESC ) rn
FROM
tbl_hos_score
) T
WHERE
rn = 1;
知识点
开窗函数
注意点
在 PostgreSQL 中子查询必须得加上别名,即使我们在其它地方不会再引用到这个别名。
在 Oracle 中可以不加。