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(*) 否则你会得到 1 而不是 0 http://sqlfiddle.com/#!1/fd4ff/1

于 2013-03-04T21:53:55.013 回答
1

The following works for 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 回答