Postgres epoch摘录开始于上个月结束

时间:2018-01-31 11:20:10

标签: postgresql time epoch

我需要在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};

当我手动放置值时,速度更快(我有时钟索引)。但我不知道如何提取第一个,以及上个月的最后一个。 提前感谢您的帮助:)

1 个答案:

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

请注意<运算符,而不是<=