各月に 1 つ、1 年に 12 の、いくつかの (ログ) テーブルを取得しました。テーブル パターンは、usage_YYYY_MM (つまり、usage_2012_11、usage_2012_12、usage_2013_01 など) です。
私がやりたいことは、これらのテーブルの内容を 1 つのビューに結合することです。時には丸一年、時には過去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_」テーブルに関する正規化についての善意の発言を探していません..私たちはこれをよく知っていますが、このようにしたい特定の(レガシー)理由があります..