2013-09-04 5 views
6

Chcę pobrać ostatnie 12 miesięcy danych z db, napisałem zapytanie o to, ale to tylko daje mi liczyć i miesiąc, ale nie rok oznacza miesiąc związany z którym rokiem.Zdobądź ostatnie 12 miesięcy dane z Db z roku w Postgresie

My 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) 

daje mi moc jak ten

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

ale chcę roku z miesiąca jak 7 - 2012 roku lub w innych kol, nie ma znaczenia

+1

Zawiera "date_part (" year ", revision_timestamp)' gdzieś ...? – deceze

Odpowiedz

7

Wierzę, że chciał w ten sposób:

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) 

lub

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') 

Należy pamiętać, że jeśli filtrować według revision_timestamp > (current_date - INTERVAL '12 months'), dostaniesz zakres od bieżącej daty w ostatnim roku (więc jeśli dzisiaj jest '2013-09-04' dostaniesz zakres od '2012-09-04')

Powiązane problemy