我想得到一张结果表,显示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日
如何格式化我的查询以包含那些额外的时间?
答案 0 :(得分: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;
这将生成所需范围内的所有日期。确保不要计数(*)或者你会得到1而不是0 http://sqlfiddle.com/#!1/fd4ff/1
答案 1 :(得分: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