PostgreSQL 9.4 の次のイベント データを検討してください。
eventTime | eventName
2015-09-25 18:00:00 | 'AAA'
2015-09-25 17:00:00 | 'BBB'
2015-09-25 16:00:00 | 'BBB'
2015-09-25 15:00:00 | 'BBB'
2015-09-25 14:00:00 | 'AAA'
2015-09-26 13:00:00 | 'CCC'
2015-09-26 12:00:00 | 'AAA'
2015-09-26 11:00:00 | 'BBB'
2015-09-26 10:00:00 | 'CCC'
2015-09-26 09:00:00 | 'BBB'
2015-09-27 08:00:00 | 'AAA'
2015-09-27 07:00:00 | 'CCC'
2015-09-27 05:00:00 | 'CCC'
2015-09-27 04:00:00 | 'CCC'
2015-09-27 03:00:00 | 'CCC'
2015-09-27 02:00:00 | 'AAA'
単一count()
ベースのテーブルは単純ですが、たとえば次のようになります。
SELECT eventTime, count(1)
from (SELECT data->>'eventName' as eventName,
date_trunc('day', to_timestamp(data->>'timestamp','YYYY-MM-DDZHH24:MI:SS.MS')::timestamp without time zone) AS eventTime
FROM sidetrack where (data->>'eventName' = 'AAA') IS TRUE) AS tmptab
GROUP BY eventTime
ORDER BY eventTime ASC
の 1 つの値の出現のみをカウントできますeventName
。私は SQL の経験があまりなく、双方向度数分布表を作成する方法を見つけるのに苦労しています。この例では、結果は次のようになります。
day | 'AAA' | 'BBB' | 'CCC'
------------+-------+-------+-------
2015-09-25 | 2 | 3 | 0
2015-09-26 | 1 | 2 | 2
2015-09-27 | 2 | 0 | 4
数値を持つ変数が を使用してカウントされる例がありますがwith_bucket()
、それは文字列値フィールドには一般化されません。
WITH
次のようなネストされた選択を試しました。
WITH
foo AS (
SELECT ...
),
bar AS (
SELECT ...
FROM foo
),
SELECT *
FROM bar;
そして、外部JOINSを使用していますが、これをクラックすることはできません.