2017-04-04 50 views
0

私は、週番号でグループ分けしてSQLクエリを表示しようとしています。週の開始ではなく週の終わりを表示することを試みています。これどうやってするの?週ごとのグループ番号と週末のグループ化

select extract(week from actual_sale_date) as week_number, 
to_char(date_trunc('week', actual_sale_date) as date, 'MM/dd/yyyy'), count(*) 
from data 
where project_id = 'ABC' 
and actual_sale_date >= date_trunc('year',current_date) 
group by rollup((actual_sale_date)) 

結果:要求

week_number  date     count 
    1    01/02/2017    2 
    1    01/02/2017    1      
    2    01/09/2017    1 
    2    01/09/2017    1 
    2    01/09/2017    1 
    3    01/16/2017    3 
    3    01/16/2017    1 
              10 

week_number     week_ending      count 
    1      01/08/2017      3 
    2      01/15/2017      3 
    3      01/22/2017      4 
                   10 
+2

試着 '+' 1週間 ':: interval - ' 1 day ':: interval'?.. –

+0

ありがとうございます週末の問題を処理します。 –

+0

@JakeWagnerはい、 'to_char()'の中に - また、 'GROUP BY'に' date_trunc() 'を使わないので、1週間に複数の結果が得られます。 'GROUP BY date_trunc( 'week'、actual_sale_date)、extract(actual_sale_dateからの週)' – pozs

答えて

1

あなたが故に週の結果は週によって集約なっていなかったactual_sale_dateによってグループ化されました。週の終了日を取得するには、週の先頭に6日を追加します。 rollupにweek_numberとweek end dateを使用してください。

select extract(week from actual_sale_date) as week_number, 
to_char(date_trunc('week', actual_sale_date) + interval '6' day,'MM/dd/yyyy'), 
count(*) 
from data 
where project_id = 'ABC' 
and actual_sale_date >= date_trunc('year',current_date) 
group by rollup((extract(week from actual_sale_date) 
       ,to_char(date_trunc('week', actual_sale_date) + interval '6' day,'MM/dd/yyyy'))) 
+0

のようなものが必要です。どんな機能が 'select'レベルで適用されても**はグループ別のレベルでも? –

関連する問題