1

我有几个(记录)表,每个月一个,全年 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_”表的规范化的善意评论。我们很清楚这一点,但有特定的(遗留)理由希望它们像这样。

4

0 回答 0