これはかなり一般的なSQLの質問ですが、私はPostgreSQL 9.4で他のデータベースソフトウェアを使用するオプションなしで作業しています。 。1つのSQLクエリで異なる条件の複数の集計合計
1つのクエリから複数の集計合計を返すことができるようにする必要があります。各集計は新しい行にあり、各グループは一意の時間間隔で決定されます。 WHERE time_stamp BETWEEN '2016-02-07' AND '2016-02-14'
。 WHERE
節を満たすレコードの数は不明であり、ゼロの場合があります。その場合、理想的には結果は「0」です。
(
SELECT SUM(minutes) AS min
FROM downtime
WHERE time_stamp BETWEEN '2016-02-07' AND '2016-02-14'
)
UNION ALL
(
SELECT SUM(minutes)
FROM downtime
WHERE time_stamp BETWEEN '2016-02-14' AND '2016-02-21'
)
UNION ALL
(
SELECT SUM(minutes)
FROM downtime
WHERE time_stamp BETWEEN '2016-02-28' AND '2016-03-06'
)
UNION ALL
(
SELECT SUM(minutes)
FROM downtime
WHERE time_stamp BETWEEN '2016-03-06' AND '2016-03-13'
)
UNION ALL
(
SELECT SUM(minutes))
FROM downtime
WHERE time_stamp BETWEEN '2016-03-13' AND '2016-03-20'
)
UNION ALL
(
SELECT SUM(minutes)
FROM downtime
WHERE time_stamp BETWEEN '2016-03-20' AND '2016-03-27'
)
結果:これは私がこれまで働いてきたものである
min
---+-----
1 | 119
2 | 4
3 | 30
4 |
5 | 62
6 | 350
そのクエリは、私が欲しいほとんど正確な結果を取得します。確かに私は結果と必要なものを正確に行うことができます。レコードのない時間範囲は空白ですが、それは予測可能でしたが、「0」を選択するのに対し、ソフトウェアの空白行は考慮することができます。
しかし、それが表す6週間はひどいわけではありませんが、私は柔軟性があり、異なる時間帯で同じことをすることができます。毎週1週間、毎週3カ月、6カ月、毎月1年、2年など...上に書いたように、それは退屈な速さになるように感じる...例えば1週間2年間の期間は104サブクエリです。
私が後にしたのは、同じ(または同様の)結果を得るよりエレガントな方法です。
上記と同様のクエリの反復を104回(現在は6回)行うのが特に効率的な使用法であるかどうかはわかりません。
最終的に私は長くて醜いクエリを構築するのに役立つコードを書くつもりですが、より簡潔でスケーラブルなクエリを作成することはまだ素晴らしいことです。
を私はあなたのクエリはあなたがそれがない何を考えていないと思います。 'BETWEEN'はインクルーシブなので、境界が含まれています。 –