0

我有两个表,fbpost 和 fbalbum,每个表都有一个DATETIME名为createdTime. 我正在查找每月的专辑数量和每月的帖子数量,并将它们加在一起。

这是我的查询(按描述工作):

SELECT  createdTime, itemCount FROM 
        (SELECT DATE_FORMAT(createdTime, '%m-%Y') AS createdTime, COUNT(*) AS itemCount FROM fbpost WHERE page_id =2 
        GROUP BY YEAR(createdTime), MONTH(createdTime)
        UNION ALL
        SELECT DATE_FORMAT(createdTime, '%m-%Y') AS createdTime, COUNT(*) AS itemCount FROM fbalbum WHERE page_id=2
        GROUP BY YEAR(createdTime), MONTH(createdTime)) AS foo
GROUP BY createdTime

这给出了结果:

01-2009 | 173
01-2010 | 21
01-2011 | 521
01-2012 | 776
02-2009 | 117
02-2010 | 158
02-2011 | 678
...

但我希望结果是这样排序的:

01-2009 | 173
02-2009 | 56
03-2009 | 543
04-2009 | 211
05-2009 | 723
06-2009 | 55
07-2009 | 521
...

我怎样才能做到这一点?

注意: DATE_FORMAT()给出一个字符串,而不是 a DATETIME,所以你不能按日期排序。但是,如果我DATE_FORMAT()在两个嵌套的 select 语句中取出,我会在大多数月份得到 2 行,因为那会离开这一天。尽管每个嵌套选择每月只有一行,但它们的日期通常会有所不同,因为一个月中的最后一项可能在任何一天。

4

1 回答 1

1

DATE_FORMAT在您的外部查询之前不要使用:

SELECT DATE_FORMAT(a.createdTime, '%m-%Y') AS createdTime, SUM(a.itemCount) AS itemCount
FROM
    (SELECT DATE(createdTime) AS createdTime, COUNT(*) AS itemCount 
    FROM fbpost WHERE page_id = 2
    GROUP BY DATE(createdTime)
    UNION ALL
    SELECT DATE(createdTime) AS createdTime, COUNT(*) AS itemCount
    FROM fbalbum WHERE page_id = 2
    GROUP BY DATE(createdTime)) a
GROUP BY YEAR(a.createdTime), MONTH(a.createdTime)

看到它在行动*

*演示没有page_id

于 2012-10-15T23:14:38.750 回答