sql - SQL SERVER 如何选择每组中的最新记录?
问题描述
| ID | TimeStamp | Item |
|----|-----------|------|
| 1 | 0:00:20 | 0 |
| 1 | 0:00:40 | 1 |
| 1 | 0:01:00 | 1 |
| 2 | 0:01:20 | 1 |
| 2 | 0:01:40 | 0 |
| 2 | 0:02:00 | 1 |
| 3 | 0:02:20 | 1 |
| 3 | 0:02:40 | 1 |
| 3 | 0:03:00 | 0 |
我有这个,我想把它变成
| ID | TimeStamp | Item |
|----|-----------|------|
| 1 | 0:01:00 | 1 |
| 2 | 0:02:00 | 1 |
| 3 | 0:03:00 | 0 |
请指教,谢谢!
解决方案
您需要按 id 分组,并通过时间戳值降序过滤,以使所有记录在子查询中返回为第一个(值为 1)并具有分析函数的贡献:
SELECT *
FROM
(
SELECT *,
DENSE_RANK() OVER (PARTITION BY ID ORDER BY TimeStamp DESC) AS dr
FROM t
) t
WHERE t.dr = 1
其中DENSE_RANK()
使用分析函数是为了也包括有关系的记录。
推荐阅读
- android - 打开 PDF 文件将打开一个空白 PDF
- php - 如何使用类常量作为绑定参数服务的标签?
- php - 非 HTTPS 站点的 SSL 错误日志记录
- bash - 对文件进行排序,然后将它们传递给 awk 进行搜索
- mysql - 更新对mysql表的数组响应
- python - 试图弄清楚如何使 python 乌龟图形的画布更小,但它不能正常工作
- python - Python 错误“最多输入 1 个参数,得到 3 个”是什么意思?
- laravel - 如何在 laravel 单元测试中获取响应数据
- python - UPDATE 无法更新 sqlite3 数据库中的属性
- java - 类型参数 T 扩展类不允许在方法中将类用作 T 参数