在Postgres获取Db的最近12个月的数据

Inf*_*ian 7 sql postgresql

我想从db中获取最近12个月的数据,我已经为此写了一个查询但是只给了我数月而不是年份意味着与哪一年相关的月份.

我的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)
Run Code Online (Sandbox Code Playgroud)

它给了我这样的输出

 month | count 
-------+-------
     7 |     21
     8 |      4
     9 |     10
Run Code Online (Sandbox Code Playgroud)

但是我想要像2012年7月一样的月份,或者在其他col的年份,并不重要

mvp*_*mvp 10

我相信你想要这个:

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
Run Code Online (Sandbox Code Playgroud)


Rom*_*kar 5

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)
Run Code Online (Sandbox Code Playgroud)

要么

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')
Run Code Online (Sandbox Code Playgroud)

请记住,如果按过滤,则将revision_timestamp > (current_date - INTERVAL '12 months')得到去年的当前日期的范围(因此如果今天是,则将是的'2013-09-04'范围'2012-09-04'