0
私はevent
テーブルにタイムスタンプフィールドと、搾乳パーラーで収集された統計情報を含む多数のフィールドを持っています。PostgreSQLの期間でのイベントレコードの集計
これらのフィールドの平均、合計、およびカウントは、6:00〜18:00の間の12時間ごとに計算し、翌日の18:00〜6:00の間に計算する必要があります。
私はevent
テーブルにタイムスタンプフィールドと、搾乳パーラーで収集された統計情報を含む多数のフィールドを持っています。PostgreSQLの期間でのイベントレコードの集計
これらのフィールドの平均、合計、およびカウントは、6:00〜18:00の間の12時間ごとに計算し、翌日の18:00〜6:00の間に計算する必要があります。
は、次のようになります。
テストのセットアップ:
-- DROP TABLE t;
CREATE TEMP TABLE t (ts timestamp, val1 int, val2 int);
INSERT INTO t VALUES
('2012-03-12 06:00:00', 1, 12)
,('2012-03-12 06:00:21', 2, 2)
,('2012-03-12 06:53:21', 3, 45)
,('2012-03-12 07:53:21', 8, 7)
,('2012-03-12 08:53:21', 8, 6)
,('2012-03-12 09:53:21', 6, 23)
,('2012-03-12 10:53:21', 23, 43)
,('2012-03-12 18:00:00', 4, 58)
,('2012-03-12 19:00:00', 6, 57)
,('2012-03-12 20:00:00', 8, 32)
,('2012-03-13 20:00:00', 7, 12)
,('2012-03-13 20:00:00', 9, 15)
,('2012-03-14 20:00:00', 14, 14);
問合せ:
SELECT (ts - interval '6h')::date AS day
,CASE WHEN ts::time >= '6:00'::time
AND ts::time < '18:00'::time
THEN '6-18'
ELSE '18-6'
END AS shift
,sum(val1) AS val1_sum
,sum(val2) AS val2_sum
,count(*) As ct
FROM t
GROUP BY 1,2
ORDER BY 1,2;
結果:
day | shift | val1_sum | val2_sum | ct
------------+-------+----------+----------+----
2012-03-12 | 6-18 | 51 | 138 | 7
2012-03-12 | 18-6 | 18 | 147 | 3
2012-03-13 | 18-6 | 16 | 27 | 2
2012-03-14 | 18-6 | 14 | 14 | 1
注私は時間をずらす方法を取得します一貫性のある日付と私が012を使用する方法正確な時間範囲についてはおよび<
です。
テーブル定義とサンプルデータが役に立ちます。あなたは何を試しましたか? –