PostgreSQL每月十五天选择一次

时间:2014-07-03 14:35:51

标签: sql postgresql-9.1

你好,我有一些记录:

date               Money

1/6/2014            100
12/6/2014            2200
13/6/2014            500
1/3/2014            100
2/5/2014            2200
30/5/2014            500
30/6/2014            100
23/6/2014            2200
31/6/2014            500

好吧,我有一个参数,它的日期例如我需要7月30日的所有记录,但我需要记录的总和,如果非常容易

select sum(money) from info where date <= param
group by month

但是现在我需要按月的所有记录组,但我每个月需要每15个月来降低我需要的结果中的参数,例如

param = 30/6/2014

我希望得到的结果:

15/6/2014   sum(money)
15/5/2014   sum(money)
15/4/2014   sum(money)

我需要每月15个月的记录

1 个答案:

答案 0 :(得分:1)

问题是如何将其安排到15日之前的一个月以及从16日开始的日期是在下个月。您可以通过减去15天来完成此操作。这使得所有日子都在上个月的1-15之间。然后,添加一个月。这是Postgres的一种方法:

select to_char(date - 15 * interval '1 day' + interval '1 month', 'YYYY-MM') as mon,
       sum(money)
from info
where date <= param
group by to_char(date - 15 * interval '1 day' + interval '1 month', 'YYYY-MM')
order by 1;

编辑:

如果您想要从15到15月,那么您可以这样做:

select to_char(date, 'YYYY-MM') as mon,
       sum(money)
from info
where extract(day from date) <= param
group by to_char(date, 'YYYY-MM')
order by 1;

或者,如果只是一个月:

select sum(money)
from info
where to_char(date, 'YYYY-MM') = to_char(param, 'YYYY-MM') and
      date <= param;