【发布时间】:2016-11-09 18:37:06
【问题描述】:
我想查询一个表并为该月最后一天的所有行求和一列。
我们以下表为例:
CREATE TABLE example(dt date, value int)
(真实表列多,比较大,真实查询比较复杂)
我有以下疑问:
SELECT dt, SUM(value)
FROM example
WHERE dt IN (SELECT DISTINCT
date_trunc('MONTH', generate_series('2012-01-01'::date,
'2016-12-01'::date,
interval '1 day') + INTERVAL '1 MONTH - 1 day')::date)
GROUP BY dt
它在我的真实桌子上运行大约 2 秒。
但是,如果我在我的范围内生成月末日期的完整列表并将查询参数化,如下所示:
SELECT dt, SUM(value)
FROM example
WHERE dt IN ('2012-01-31', ...)
GROUP BY dt
要快得多,大约 750 毫秒。
我不希望生成日期并将它们传递给这样的查询,有没有一种方法可以完全在 SQL 中完成并使其与后一个版本一样快?
【问题讨论】:
标签: sql performance postgresql date