2

私の postgreSQL データベースには、日付と価格の列を持つテーブルがあります。('transdate' と 'price')

1 年以上にわたる日付範囲で、毎週 1 行を選択するクエリを作成したいと考えています。

ここでの別の質問/回答から、1年未満の日付範囲で機能するこのコードを実装しました:

;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 か月しか選択されません。

このコードを書き直して、範囲内の毎週から 1 つの日付/価格を選択するにはどうすればよいですか?

4

1 に答える 1

1

あなたの問題は、週番号が年の境界で折り返されることですが、週番号と年を同時に見たいということです。幸運なことに、一度にいくつかのことを PARTITION BY できます。

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 に答える