我正在尝试获取每个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
答案 0 :(得分:0)
您可以使用相关子查询进行过滤:
select t.*
from mytable t
and date = (
select max(t1.date)
from mytable t1
where strftime('%Y-%m', t1.date) = strftime('%Y-%m', t.date) and t1.id = t.id
)
另一种使用窗口函数的方法:
select *
from (
select t.*,
rank() over(partition by id, strftime('%Y-%m', date) order by date desc) rn
from mytable t
) t
where rn = 1
答案 1 :(得分:0)
具有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