2

在我的 postgreSQL 数据库中,我有一个包含日期和价格列的表。(“转换日期”和“价格”)

我想形成一个查询,该查询在跨越一年以上的日期范围内每周选择一行。

从这里的另一个问题/答案,我实现了这个代码,它适用于不到一年的日期范围:

;with cte as  
(  
  select *,  
  row_number() over (partition by Extract (week from transdate) order by transdate desc) as rn   
  from "tablename" where transdate between '06-01-1999' and '06-01-1999'::timestamp + `'50 week'::interval  
)  
select transdate, price from cte where rn = 1 order by transdate;

但是,当我将间隔延长超过 50 周时,它仍然只选择最多 12 个月。

如何重新编写此代码以从该范围内的每周选择一个日期/价格?

4

1 回答 1

1

您的问题是周数在年份边界处环绕,但您想同时查看周数年份。幸运的是,您可以一次通过几件事进行分区:

row_number() over (
    partition by extract(week from transdate),
                 extract(year from transdate)
    order by transdate desc
) as rn
于 2012-06-11T20:01:23.257 回答