计算当月的数据 - 而不是30天后的Postgres声明

时间:2013-11-10 11:13:49

标签: postgresql

我的查询从当前日期返回30天的数据,需要修改它才能返回当前月份的数据而不是当前日期的30天

  

SELECT count(1)AS counter FROM users.logged WHERE createddate> =   date_trunc('month',CURRENT_DATE);

基于Postgres的任何提示如何调整此查询

问候

4 个答案:

答案 0 :(得分:8)

这样的事情应该有效。

SELECT count(1) AS counter
FROM users.logged
WHERE date_trunc('month', createddate) = date_trunc('month', current_date);

答案 1 :(得分:1)

已经应该返回当月的值。截断执行转换10 Nov 2013 14:16 -> 01 Nov 2013 00:00,它将返回自本月初以来的数据。问题似乎是另一回事。

答案 2 :(得分:1)

  

我的查询从当前日期返回30天的数据,需要修改它才能返回当前月份的数据而不是当前日期的30天

这是不正确的。您的查询:

SELECT count(1) AS counter FROM users.logged WHERE createddate >= date_trunc('month', CURRENT_DATE);

返回所有日期> = 11月1日00:00:00,换句话说,您所说的已经是您想要的。或者,您已经简化了查询并省略了更重要的部分 - 那些被破坏的部分。如果不是:

可能是你未来的日期,并且你得到的结果不正确。如果是,请在where子句中添加其他条件:

AND created_date < date_trunc('month', CURRENT_DATE) + interval '1 month'

可能也是你的样本数据有一个奇怪的行,带有一个时区,看起来时间戳是从这个月开始的,但是日期/时间算术是在上个月降落的。

答案 3 :(得分:0)

这只会为您提供当月的数据。我尝试提取monthyear。最后一步是您可以将创建日期与当前日期时间进行比较。

SELECT count(1) AS counter 
FROM users.logged 
WHERE 
    EXTRACT(MONTH FROM createddate) = EXTRACT(MONTH FROM current_date)
    AND EXTRACT(YEAR FROM createddate) = EXTRACT(YEAR FROM current_date);