返す PostgreSQL クエリを作成する必要があります
- 一日
- その日に見つかったオブジェクトの数
その日にオブジェクトが見つからなかったとしても、毎日が結果に表示されることが重要です。(これは以前に議論されましたが、私は特定のケースで物事を機能させることができませんでした.)
最初に、結合できる日の範囲を生成する SQL クエリを見つけました。
SELECT to_char(date_trunc('day', (current_date - offs)), 'YYYY-MM-DD')
AS date
FROM generate_series(0, 365, 1)
AS offs
結果:
date
------------
2013-03-28
2013-03-27
2013-03-26
2013-03-25
...
2012-03-28
(366 rows)
今、私はそれを「作成された」列を持つ「sharer_emailshare」という名前のテーブルに結合しようとしています:
Table 'public.sharer_emailshare'
column | type
-------------------
id | integer
created | timestamp with time zone
message | text
to | character varying(75)
これが私がこれまでに持っている最高のGROUP BY
クエリです:
SELECT d.date, count(se.id) FROM (
select to_char(date_trunc('day', (current_date - offs)), 'YYYY-MM-DD')
AS date
FROM generate_series(0, 365, 1)
AS offs
) d
JOIN sharer_emailshare se
ON (d.date=to_char(date_trunc('day', se.created), 'YYYY-MM-DD'))
GROUP BY d.date;
結果:
date | count
------------+-------
2013-03-27 | 11
2013-03-24 | 2
2013-02-14 | 2
(3 rows)
望ましい結果:
date | count
------------+-------
2013-03-28 | 0
2013-03-27 | 11
2013-03-26 | 0
2013-03-25 | 0
2013-03-24 | 2
2013-03-23 | 0
...
2012-03-28 | 0
(366 rows)
私が正しく理解していれば、これは私がプレーン (暗黙のINNER
)を使用しているためであり、postgres docs で説明されているようにJOIN
、これは予想される動作です。
私は数十の StackOverflow ソリューションを調べましたが、クエリが機能するものはすべて MySQL/Oracle/MSSQL に固有のもののようで、それらを PostgreSQL に変換するのに苦労しています。
この質問をした人は、Postgres で答えを見つけましたが、しばらく前に有効期限が切れたペーストビン リンクに置きました。
, , ,に切り替えたりLEFT OUTER JOIN
、 null の場合はステートメントを使用して別の値をサブにしたり、デフォルト値を提供したりしようとしましたが、必要なものを取得する方法でそれらを使用できませんでした。RIGHT JOIN
RIGHT OUTER JOIN
CROSS JOIN
CASE
COALESCE
どんな支援も大歓迎です!そして、すぐにその巨大な PostgreSQL の本を読み始めることを約束します ;)