次のようなテーブルがあります(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