2012-04-22 7 views
0

У меня есть таблица (назовем его TABLEA), который выглядит примерно так:Mysql мин/макс оптимизация

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 

Моя цель состоит в группе строк по идентификатору, и получить минимум 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 

Прямо сейчас, я использую ЛЕВЫЙ присоединиться подход:

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

ответ

2

Что случилось с простой GROUP BY, используя один проход через стол и не Самосоединение?

SELECT id, MIN(dateA), MAX(dateB) 
    FROM TableA 
GROUP BY id; 
+0

Lol what the heck? Клянусь, что в последний раз это не сработало (я должен был пробоваться неправильно) – m0dE

+0

В любом случае, спасибо! – m0dE

Смежные вопросы