1

Xにエントリがある日付を示す結果のテーブルを取得したい

SELECT count(*),
       date_column
FROM myTable
WHERE X
GROUP BY date_column
ORDER BY date_column DESC

これは機能しますが、Xにエントリがない日付も確認したいと思います。私のユースケースでは、これは中間の日付になります。

たとえば、2013-3-10が結果に含まれますが、次の日付は2013-3-5になりますが、count = 0の日も返すように結果が必要なので、この場合は6日、7日です。 、8日と9日

これらの余分な時間を含めるようにクエリをフォーマットするにはどうすればよいですか?

4

2 に答える 2

3

簡単な例をモックアップしました。

SELECT q.date_column, count(f.id) FROM
(SELECT
 generate_series(min(date_column),max(date_column), '1 day') AS date_column
 FROM mytable) AS q
LEFT JOIN mytable AS f
ON q.date_column=f.date_column
GROUP BY q.date_column ORDER BY q.date_column;

これにより、必要な範囲のすべての日付が生成されます。count(*)を実行しないように注意してください。そうしないと、0ではなく1が返されます http://sqlfiddle.com/#!1/fd4ff/1

于 2013-03-04T21:53:55.013 に答える
1

以下はpostgresqlで機能します。

SELECT count(*) as count, datecolumn as date FROM myTable group by datecolumn UNION 
select 0 as count, i::date as date from generate_series('2013-01-01', 
'2013-12-31', '1 day'::interval) i where i not in (select datecolumn from myTable) order by date desc
于 2013-03-04T22:00:44.937 に答える