我有几个(记录)表,每个月一个,全年 12 个。表格模式是:usage_YYYY_MM(所以应该是:usage_2012_11、usage_2012_12、usage_2013_01 等)
我想要做的是将这些表的内容组合在一个视图中。有时是一整年,有时是过去的 N 个月。在我看来,我会使用类似的东西:
(SELECT order_id, SUM(`usage`) as total, created FROM usage_2012_05 GROUP BY order_id)
UNION ALL
(SELECT order_id, SUM(`usage`) as total, created FROM usage_2012_06 GROUP BY order_id)
UNION ALL
(SELECT order_id, SUM(`usage`) as total, created FROM usage_2012_07 GROUP BY order_id)
ORDER BY created;
由于我不想每个月都将新表添加到特定视图中,因此我曾想过循环执行此操作。我一直在窥探并且已经明白我应该使用像 SELECT GROUP_CONCAT 这样的东西。这是我到目前为止得到的:
SET @resultQuery = NULL;
SELECT
GROUP_CONCAT(
CONCAT('SELECT order_id, `usage` as used, created FROM ', table_name )
SEPARATOR '\r\nUNION\r\n'
)
INTO
@resultQuery
FROM
information_schema.`TABLES`
WHERE
table_name LIKE "usage_%"
ORDER BY
table_name DESC LIMIT 2;
PREPARE stmt FROM @resultQuery;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
现在,虽然这确实给了我整个数据集,但最后一点(ORDER BY table_name DESC LIMIT 2)似乎不起作用......所以,我仍然不完全在那里......
ORDER BY DESC 和 LIMIT 不起作用有什么原因吗?我应该以不同的方式处理这个问题吗?
顺便说一句:没有寻找关于“usage_”表的规范化的善意评论。我们很清楚这一点,但有特定的(遗留)理由希望它们像这样。