2014-07-03 55 views
1

你好,我有一些記錄:PostgreSQL的選擇每十五天的月份的

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 

嗯,我有一個PARAM,其例如我需要的7月30日的所有記錄的日期,但我需要的,如果記錄的總和很容易認爲

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

但現在我需要通過一個月的一天所有記錄組,但我需要每十五每個月來降低我的結果的參數,我需要例如

param = 30/6/2014 

的結果,我希望能得到:

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

我需要爲每個月的十五紀錄

+1

因此,基本上你想通過「財政月」來總結,其中第15個是你的轉換?所以你的'15/6/2014'實際上會涵蓋'16/5/2014 - > 15/6/2014'的日期嗎? –

+0

是的但不是怎麼做 – Alberto

回答

1

的問題是如何將其安排到天至15日在一個月天第16個月將在下個月。你可以通過減去15天來做到這一點。這使得上個月的所有日子從1月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個,那麼你可以做:

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; 
+0

戈登謝謝,但在查詢中我看到你將參數下的所有數據至少15天(30/6/2014 - 15天爲一個月),但如果我輸入日期2014年6月15日在這種情況下不應該減去15天吧?, 我的問題是,是否需要減去選擇的總和而不是在哪裏?我發現查詢的結果總是會在第6個月得到等於30的較低結果,感謝您的幫助! – Alberto

+0

@Alberto。 。 。我不明白這個評論。也許你可以通過編輯問題並添加所需結果的示例數據來顯示你的意思。 –

+0

對不起,在sql查詢結果總是在日期2014年6月30日之前,查詢中唯一有一個名爲mon的字段每個15個月都有正確的日期,但是查詢始終將金額的總和日期30,29,28 ... 15/6/2014我的問題是如何限制查詢只添加日期小於或等於每個月的15日,謝謝! – Alberto