【发布时间】:2012-10-15 22:53:06
【问题描述】:
我有两个表,fbpost 和 fbalbum,每个表都有一个名为 createdTime 的 DATETIME 列。我正在查找每月的专辑数量和每月的帖子数量,并将它们加在一起。
这是我的查询(如前所述):
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() 给出一个字符串,而不是 DATETIME,因此您不能按日期排序。但是,如果我在两个嵌套的 select 语句中取出 DATE_FORMAT(),我会在大多数月份得到 2 行,因为那会离开这一天。尽管每个嵌套选择每月只有一行,但它们的日期通常会有所不同,因为一个月中的最后一项可能在任何一天。
【问题讨论】:
标签: mysql date sql-order-by union