2016-10-14 27 views
2

在MySQLPostgreSQL的查询,让每个月算,一年内

SELECT y, m, Count(users.created_date) 
    FROM (
     SELECT y, m 
     FROM 
     (SELECT YEAR(CURDATE()) y UNION ALL SELECT YEAR(CURDATE())-1) years, 
     (SELECT 1 m UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 
      UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 
      UNION ALL SELECT 9 UNION ALL SELECT 10 UNION ALL SELECT 11 UNION ALL SELECT 12) months) ym 
     LEFT JOIN users 
     ON ym.y = YEAR(FROM_UNIXTIME(users.created_date)) 
      AND ym.m = MONTH(FROM_UNIXTIME(users.created_date)) 
    WHERE 
     (y=YEAR(CURDATE()) AND m<=MONTH(CURDATE())) 
     OR 
     (y<YEAR(CURDATE()) AND m>MONTH(CURDATE())) 
    GROUP BY y, m; 

Mysql的输出

+------+----+----------------------+ 
| y | m | Count(users.created) | 
+------+----+----------------------+ 
| 2012 | 5 |     5595 | 
| 2012 | 6 |     4431 | 
| 2012 | 7 |     3299 | 
| 2012 | 8 |     429 | 
| 2012 | 9 |     0 | 
| 2012 | 10 |     3698 | 
| 2012 | 11 |     6208 | 
| 2012 | 12 |     5142 | 
| 2013 | 1 |     1196 | 
| 2013 | 2 |     10 | 
| 2013 | 3 |     0 | 
| 2013 | 4 |     0 | 
+------+----+----------------------+ 

**在PostgreSQL QUERY **

SELECT to_char(created_date, 'MM'), 
     count(id) 
FROM users 
WHERE created_date > 
     date_trunc('month', CURRENT_DATE) - INTERVAL '1 year' 
GROUP BY 1 

POSTGRESQL OUTPUT postgresql output

我可以知道如何像mysql输出一样获取postgresql输出。需要在一年内得到当前数据的结果。

+1

好了,数据本身似乎有所不同,但除此之外,问题究竟是什么? – Mureinik

+0

你的MySQL查询没有产生你指定的输出。它不可能输出一个数为0的行。 –

+0

@GordonLinoff sry gordon。现在我更改mysql查询。 – boopathi008

回答

2

我假设你正在寻找的是其中数为0的行如果是这样,你可以使用generate_series的情况下和左连接上你的表数据:

SELECT to_char(i, 'YY'), to_char(i, 'MM'), 
     count(id) 
    FROM generate_series(now() - INTERVAL '1 year', now(), '1 month') as i 
    left join users on (to_char(i, 'YY') = to_char(created_date, 'YY') 
         and to_char(i, 'MM') = to_char(created_date, 'MM') and login_type = 1) 
    GROUP BY 1,2; 
+0

是的,应该是“由1,2组”而不是“由1组”谢谢奥拉夫,固定答案 –

+0

感谢您的回答..其工作正常..您节省我的时间。 :) – boopathi008

+0

当我使用条件它不工作。例如我添加了'where login_type = 1'。那个时候它的节目只计数大于0的数字 – boopathi008

相关问题