2013-09-04 7 views
6

में वर्ष के साथ Db से पिछले 12 महीनों में डेटा प्राप्त मैं पिछले डाटाबेस से 12 माह डेटा लाने के लिए चाहते हैं, मुझे लगता है कि के लिए एक प्रश्न लिखा है लेकिन यह है कि केवल मुझे गिनती और महीने दे रही है लेकिन नहीं साल महीने जो वर्ष से संबंधित होता है।Postgres

मेरे Sql:

Select count(B.id),date_part('month',revision_timestamp) from package AS 
A INNER JOIN package_revision AS B ON A.revision_id=B.revision_id 
WHERE revision_timestamp > (current_date - INTERVAL '12 months') 
GROUP BY date_part('month',revision_timestamp) 

यह मुझे इस

month | count 
-------+------- 
    7 |  21 
    8 |  4 
    9 |  10 

तरह उत्पादन देता है, लेकिन मैं 7 की तरह महीने के साथ वर्ष चाहते हैं - 2012, या अन्य col में साल, कोई फर्क नहीं पड़ता

+1

'date_part ('year', revision_timestamp) कहीं कहीं ... शामिल करें? – deceze

उत्तर

7

मेरा मानना ​​है कि आप इस चाहता था:

SELECT to_char(revision_timestamp, 'YYYY-MM'), 
     count(b.id) 
FROM package a 
JOIN package_revision b ON a.revision_id = b.revision_id 
WHERE revision_timestamp > 
     date_trunc('month', CURRENT_DATE) - INTERVAL '1 year' 
GROUP BY 1 
4
select 
    count(B.id), 
    date_part('year', revision_timestamp) as year, 
    date_part('month',revision_timestamp) as month 
from package as A 
    inner join package_revision as B on A.revision_id=B.revision_id 
where 
    revision_timestamp > (current_date - INTERVAL '12 months') 
group by 
    date_part('year', revision_timestamp) 
    date_part('month', revision_timestamp) 

या

select 
    count(B.id), 
    to_char(revision_timestamp, 'YYYY-MM') as month 
from package as A 
    inner join package_revision as B on A.revision_id=B.revision_id 
where 
    revision_timestamp > (current_date - INTERVAL '12 months') 
group by 
    to_char(revision_timestamp, 'YYYY-MM') 

ध्यान रखें कि, अगर आप revision_timestamp > (current_date - INTERVAL '12 months') के आधार पर फ़िल्टर, आप पिछले साल में वर्तमान दिनांक से लेकर मिलेगा (यदि ऐसा है तो आज '2013-09-04' है आप '2012-09-04' से रेंज मिल जाएगा)