sql - SQL - 获取最近的记录
问题描述
我有一个table
:
Id | Name | Date
-----+----------+-----------------------
1 | name1 | 2021-02-10 13:00:00.000
-----+----------+-----------------------
1 | name2 | 2021-02-10 05:00:00.000
-----+----------+-----------------------
1 | name3 | 2021-02-09 14:00:00.000
-----+----------+-----------------------
2 | name4 | 2021-01-02 03:00:00.000
-----+----------+-----------------------
2 | name5 | 2021-01-07 11:00:00.000
-----+----------+-----------------------
2 | name6 | 2021-01-07 08:00:00.000
我需要获取Date
每个组的最新记录(仅日期而不考虑时间)Id
:
Id | Name | Date
-----+----------+-----------------------
1 | name1 | 2021-02-10 13:00:00.000
-----+----------+-----------------------
1 | name2 | 2021-02-10 05:00:00.000
-----+----------+-----------------------
2 | name5 | 2021-01-07 11:00:00.000
-----+----------+-----------------------
2 | name6 | 2021-01-07 08:00:00.000
解决方案
一种方法使用RANK()
:
SELECT T.ID, T.NAME, T.DATE
FROM (SELECT t.*
RANK() OVER (PARTITION BY ID ORDER BY CONVERT(DATE, DATE) DESC) AS SEQNUM
FROM T
) T
WHERE T.SEQNUM = 1;
推荐阅读
- python - 如何在不知道 JSON 文件中上一级信息的情况下找到密钥
- mysql - JSON 提取和转换为 MySQL 类型
- javascript - 匹配除字符串列表之外的所有内容的正则表达式
- visual-c++ - 检测输入键 C++
- etl - Informatica 过滤器基于不同数据库中另一个表上的日期列?
- javascript - 在 Angular 中从 pom.xml 读取 POM 版本
- windows - Docker 运行总是冻结或 WSL Ubuntu 发行版在等待生命周期服务器时停止
- python - 如何将嵌套字典中的值添加到玩家的统计数据中?
- angular - IONIC 4 FILE PLUGIN:resolveLocalFilesystemUrl 解析但将每个值作为“入口对象”的“UNDEFIED”
- java - Vertx 将 csv 文件/数据流式传输到 http 响应