我有一个看起来像这样的表(我们称之为 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 join 方法:
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 秒才能得到想要的结果。
谁能建议我一种适用于我的情况的良好优化技术?
谢谢你。
Ĵ