SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 03.01.2012 13:00:22

Norfonzor
Участник
Зарегистрирован: 15.11.2011
Сообщений: 6

Группировка по полю, с выделением максимального значения

1 таблица tab1
id, DATA
в таблице находятся для каждого id несколько дат (790тыс записей)
_________
id  DATA
1   2007
1   2009
1   2004
2   2009
2   2012
3   2004
3   2002
3   2006


2 таблица tab2
id_people, FIO
таблица людей id_people(key) (112тыс записей)
________________
id_people  FIO
1            Иванов
2            Петров
3            Сидоров

таблицы связаны по tab1.id = tab2.id_people

Необходимо сгруппировать записи по id с выделением максимальной даты

Хочу получить в результате запроса:
FIO        DATA
Иванов   2009
Петров   2012
Сидоров 2006

попытался написать запрос:
SELECT t2.DATA , t2.FIO FROM
(SELECT t1.DATA , t1.FIO, t1.id_people
FROM
(select  tab1.DATA,  tab1.id, tab2.id_people, tab2.FIO,
from tab1, tab2
WHERE tab2.id_people=tab1.id
order by tab1.DATA desc
) as t1
GROUP BY t1.id_people) as t2
WHERE ".$_where."

в $_where пишу все свои ограничения по дате (в фильтру запроса).
правильно ли я написал запрос?
t1- список упорядоченный по дате
t2- группировка по макс. дате
основной запрос фильтр из сгруппированных записей

Запрос выполняется 40 сек, можно ли как то ускорить выполнение за счет оптимизации кода?

Отредактированно Norfonzor (03.01.2012 14:23:02)

Неактивен

 

#2 03.01.2012 23:01:25

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Группировка по полю, с выделением максимального значения

select tab2.FIO, t1.`DATA` from
(select id, max(`DATA`) as `DATA` from tab1 group by id) t1
join tab2 on tab2.id_people=t1.id;

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson