1

私はこの現在のクエリを持っています:

ここに画像の説明を入力

結果は次のとおりです。

ここに画像の説明を入力

これらの「status_changes」をすべて取得し、それらを日ごとに一意に分割して、日ごとのステータスの変化を確認し、最後にそれらを合計できるようにしたいと考えています。次のようになります。

ここに画像の説明を入力

これは可能ですか?私の主な目標は、「spot_Check_begin」から「spot_check_end」までの時間枠全体ではなく、12 行目の「count(distinct driver_id) as status_changes」が 1 日ごとに一意になるようにすることです。

おそらく、考えられる別のクエリの全体像を見逃しているのでしょうか?

4

1 に答える 1

1

COUNT の代わりに SUM を CASE WHEN と組み合わせて使用​​できます。

例えば:

SELECT 
sum(CASE WHEN created_at::DATE = CURRENT_DATE THEN 1 ELSE 0 END) as status_changes_1,
sum(CASE WHEN created_at::DATE = CURRENT_DATE - interval '1 day' THEN 1 ELSE 0 END) as status_changes_2,
sum(CASE WHEN created_at::DATE = CURRENT_DATE - interval '2 day' THEN 1 ELSE 0 END) as status_changes_3,
FROM

開発バージョンでは、集計関数で FILTER を使用できます ( http://www.postgresql.org/docs/devel/static/sql-expressions.html#SYNTAX-AGGREGATES )。近いうちに使えるようになりましょう。

count(driver_id) FILTER (WHERE created_at = CURRENT_DATE) AS status_changes_1
于 2013-11-30T19:40:03.007 に答える