テーブルを照会し、その月の最後の日からすべての行の列を合計します。Postgres - 月の最終日から行を合計する速い方法
のは、一例として、次の表を使用してみましょう:
CREATE TABLE example(dt date, value int)
(実際のテーブルにはさらに多くの列があり、比較的大きく、実際のクエリがより複雑である)
私は次のクエリを持っています:
SELECT dt, SUM(value)
FROM example
WHERE dt IN (SELECT DISTINCT
date_trunc('MONTH', generate_series('2012-01-01'::date,
'2016-12-01'::date,
interval '1 day') + INTERVAL '1 MONTH - 1 day')::date)
GROUP BY dt
実際のテーブルで約2秒で実行されます。
しかし、私は私の範囲内で月末の日の完全なリストを生成し、そのようなクエリをparameterise場合:
SELECT dt, SUM(value)
FROM example
WHERE dt IN ('2012-01-31', ...)
GROUP BY dt
それははるかに速く、〜750msです。
日付を生成してそのようなクエリに渡すのは好きではありませんが、これをSQLで完全に実行して後者のバージョンと同じようにできる方法はありますか?
は私が実際に使用したクエリだ追加+ interval '1 month - 1 day' generate_series( '2012-01-01' :: date、'2016-11-10 ':: date、interval' 1 month ')dates(d) –