我需要在postgres中找到表历史中的行数,其中clock列中的日期是从上个月开始的(时钟存储为epoch时间戳)。 首先我做了:
select count(clock) from history where
date_trunc('month',to_timestamp(clock)) = date_trunc('month', CURRENT_DATE) - INTERVAL '1 month';
但这很慢。我以为如果我这样做的话,我会更快:
select count(clock) from history
where clock between {extracted first second of previous month} and {extracted last second of previous month};
当我手动放置值时,速度更快(我有时钟索引)。但我不知道如何提取第一个,以及上个月的最后一个。 提前感谢您的帮助:)
答案 0 :(得分:0)
上个月的开始时间戳为:
date_trunc('month', current_timestamp) - interval '1' month
如果您避开between
运算符,则不需要计算上个月的“最后一秒”,而只需计算当月的开头:
select count(clock)
from history
where clock >= extract(epoch from date_trunc('month', current_timestamp) - interval '1' month)
and clock < extract(epoch from date_trunc('month', current_timestamp));
请注意<
运算符,而不是<=