0

次のようなテーブルがあります(tableAと呼びましょう):

    id    |   dateA    |   dateB    
----------|------------|-------------
    1     | 2011-01-01 | 2010-05-01
    1     | 2011-05-01 | 2010-06-12
    2     | 2011-01-11 | 2010-01-31
    2     | 2011-01-31 | 2010-02-01
    3     | 2011-05-11 | 2010-08-02
    3     | 2011-08-02 | 2010-09-10

私の目標は、行を ID でグループ化し、dateA の最小値と dateB の最大値を取得して、次のようなテーブルを取得することです。

    id    | min(dateA) | max(dateB)
----------|------------|-------------
    1     | 2011-01-01 | 2010-06-12
    2     | 2011-01-11 | 2010-02-01
    3     | 2011-05-11 | 2010-09-11

現在、LEFT 結合アプローチを使用しています。

SELECT
    id,
    tableB.dateA,
    tableC.dateB
FROM tableA as a

    LEFT JOIN (
        SELECT id, min(dateA)
        FROM tableA
        GROUP BY id
    )tableB ON a.id = tableB.id

    LEFT JOIN (
        SELECT id, max(dateB)
        FROM tableA
        GROUP BY id
    )tableC ON a.id = tableC.id

しかし、私のアプローチは遅すぎます。私はかなり大きなテーブルを持っていますが、目的の結果を得るには約 7 秒かかります。

私の状況に適用するための優れた最適化手法を誰かに提案してもらえますか?

ありがとうございました。

J

4

1 に答える 1

2

テーブルを 1 回通過し、自己結合を使用しない単純な GROUP BY の何が問題になっていますか?

SELECT id, MIN(dateA), MAX(dateB)
  FROM TableA
 GROUP BY id;
于 2012-04-22T22:54:49.633 に答える