通过 month/year 和 id 获取最后一条记录
Get last record by month/year and id
我需要获取每个 ID 的每个 month/year 的最后一条记录。
我的 table 每天为每个 id 捕获一个累积的订单值。所以,我需要最后我只有每个 id 的月份的最后一条记录。
我相信没有简单的东西,但是找到的例子我无法为我的案例复制。
这是我的输入数据和预期结果的示例:db_fiddle。
我的尝试不包括按月和年分组:
select ar.id, ar.value, ar.aquisition_date
from table_views ar
inner join (
select id, max(aquisition_date) as last_aquisition_date_month
from table_views
group by id
)ld
on ar.id = ld.id and ar.aquisition_date = ld.last_aquisition_date_month
你可以这样做:
with tn as (
select
*,
row_number() over (partition by id, date_trunc('month', aquisition_date) order by aquisition_date desc) as rn
from table_views
)
select * from tn where rn = 1
tn
cte 添加一个行号,该行号按日期的降序递增计数,对于每个 month/id.. 然后你只取带有 rn=1
的行号,这是最后一个aquisition_date 任何给定月份,每个 id
我需要获取每个 ID 的每个 month/year 的最后一条记录。
我的 table 每天为每个 id 捕获一个累积的订单值。所以,我需要最后我只有每个 id 的月份的最后一条记录。
我相信没有简单的东西,但是找到的例子我无法为我的案例复制。
这是我的输入数据和预期结果的示例:db_fiddle。
我的尝试不包括按月和年分组:
select ar.id, ar.value, ar.aquisition_date
from table_views ar
inner join (
select id, max(aquisition_date) as last_aquisition_date_month
from table_views
group by id
)ld
on ar.id = ld.id and ar.aquisition_date = ld.last_aquisition_date_month
你可以这样做:
with tn as (
select
*,
row_number() over (partition by id, date_trunc('month', aquisition_date) order by aquisition_date desc) as rn
from table_views
)
select * from tn where rn = 1
tn
cte 添加一个行号,该行号按日期的降序递增计数,对于每个 month/id.. 然后你只取带有 rn=1
的行号,这是最后一个aquisition_date 任何给定月份,每个 id