1

各月に 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_」テーブルに関する正規化についての善意の発言を探していません..私たちはこれをよく知っていますが、このようにしたい特定の(レガシー)理由があります..

4

0 に答える 0