10

我想从数据库中获取最近 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)

它给了我这样的输出

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

但我想要像 7 - 2012 这样的月份的年份,或者其他 col 的年份,没关系

4

2 回答 2

16

我相信你想要这个:

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
于 2013-09-04T06:52:28.300 回答
6
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'

于 2013-09-04T06:52:18.440 回答