sql返回没有结果的日期

时间:2013-03-04 21:24:11

标签: sql postgresql timestamp epoch

我想得到一张结果表,显示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日

如何格式化我的查询以包含那些额外的时间?

2 个答案:

答案 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