【发布时间】:2020-08-12 15:53:54
【问题描述】:
我有一个表 squitters,其中包括一个列 parsed_time。我想知道过去两天每小时的记录数并使用了这个查询:
SELECT date_trunc('hour', parsed_time) AS hour , count(*)
FROM squitters
WHERE parsed_time > date_trunc('hour', now()) - interval '2 day'
GROUP BY hour
ORDER BY hour DESC;
这可行,但零记录的小时数不会出现在结果中。我想要几个小时
结果中的记录也为零,计数为零,因此我使用generate_series 函数编写了此查询:
SELECT bins.hour, count(squitters.parsed_time)
FROM generate_series(date_trunc('hour', now() - interval '2 day'), now(), '1 hour') bins(hour)
LEFT OUTER JOIN squitters ON bins.hour = date_trunc('hours', squitters.parsed_time)
GROUP BY bins.hour
ORDER BY bins.hour DESC;
这可行,结果是计数为零的小时箱,但速度要慢得多。
第二个查询的 count=zero 结果如何才能获得第一个查询的速度?
(顺便说一句,parsed_time 上有一个索引)
【问题讨论】:
标签: sql postgresql date group-by query-optimization