sql - 为每个 ID 选择每个月的最后一条记录
问题描述
我正在尝试为每个 ID 提取每个月的最后一条记录。
下面是我要求的表格:
myTable
ID date data
1 2020-08-27 a
1 2020-08-28 b
1 2020-09-30 c
2 2020-08-29 d
2 2020-09-30 e
因此,我想得到以下信息:
output
ID date data
1 2020-08-28 b
1 2020-09-30 c
2 2020-08-29 d
2 2020-09-30 e
这里的“复杂性”是每个 ID 的每个月的最后一条记录可能不一样。
到目前为止,我只能通过以下请求在数据库中获取每个月最后一天可用的所有记录:
SELECT ID, date, data
from myTable
and date in (SELECT max(date) FROM myTable GROUP BY strftime('%Y-%m', date))
这给了我这个
wrong output
ID date data
1 2020-09-30 c
2 2020-08-29 d
2 2020-09-30 e
解决方案
使用 ROW_NUMBER() 窗口函数:
SELECT ID, date, data
FROM (
SELECT *,
ROW_NUMBER() OVER (PARTITION BY ID, strftime('%Y%m', date) ORDER BY date DESC) rn
FROM myTable
)
WHERE rn = 1
推荐阅读
- css - zoom inside a width fixed div
- python - 多元函数根的求根算法中的两个根之一的括号
- nginx - 如何将具有自定义请求(不是文件夹)的用户重定向到根文件夹?
- c# - 使用 C# 将选定的串行端口从 COMX 重命名为 COMY
- wordpress - 如何从分类/ wp_query中删除特定类别?
- java - Postman 返回 502 而 CURL 返回所需的响应
- matlab - 实时信号心电图处理
- django - 未获取 ManyToManyField 类型的字段及其值
- git - 是否可以使用 Visual Studio 中的 git stash 命令
- elasticsearch - 弹性搜索 - example.com 与示例