SQL запрос

Старый mweb

Модератор: [mweb team]

SQL запрос

Сообщение Jedi Ср июл 22, 2009 19:58

Вот не могу сообразить, как бы сделать запрос более оптимально. Есть таблица

id, cur, date, value
1, RUB, 2009-01-01, 10
2, USD, 2009-01-01, 20
3, EUR, 2009-01-01, 30
4, RUB, 2009-02-01, 40
5, USD, 2009-03-01, 50

cur и date являются индексами

Нужно вывести последние обновлённые валюты. я сделал так
Код: Выделить всё
select * from (select * from test order by date desc) t2 group by cur


выводится всё правильно, но нужно оптимизировать запрос чтобы использовались индексы. ибо данные пример будет плохо работать при большом объёме данных
Аватара пользователя
Jedi
Хронический Астматик
 
Сообщения: 1852
Зарегистрирован: Вс сен 08, 2002 0:01
Откуда: Russia

Re: SQL запрос

Сообщение Jedi Ср июл 22, 2009 20:00

знаю что как-то надо использовать во внутреннем запросе select max(date) и групировать по cur но чего то дальше никак. давно я с SQL не работал. позабыл уже всё :(
Аватара пользователя
Jedi
Хронический Астматик
 
Сообщения: 1852
Зарегистрирован: Вс сен 08, 2002 0:01
Откуда: Russia

Re: SQL запрос

Сообщение Alkeeper Ср июл 22, 2009 20:26

HAVING?
80 лет в интернете.
Аватара пользователя
Alkeeper
Экс-курильщик
 
Сообщения: 4183
Зарегистрирован: Вт ноя 13, 2001 1:01
Откуда: mweb

Re: SQL запрос

Сообщение Лесьяр Ср июл 22, 2009 21:40

Да, да хевинг
SELECT * FROM test GROUP BY cur HAVING date = MAX(date)
Аватара пользователя
Лесьяр
Редко заходит
 
Сообщения: 148
Зарегистрирован: Вт сен 26, 2006 15:35

Re: SQL запрос

Сообщение Jedi Ср июл 22, 2009 23:13

нет. это не работает.
я вот как сделал
работает но вот с точки зрения оптимизации не знаю как

Код: Выделить всё
SELECT t1.* from test t1, (select max(date) dt from test group by cur) t2 where t1.date = t2.dt
Аватара пользователя
Jedi
Хронический Астматик
 
Сообщения: 1852
Зарегистрирован: Вс сен 08, 2002 0:01
Откуда: Russia

Re: SQL запрос

Сообщение Лесьяр Чт июл 23, 2009 8:58

C точки зрения оптимизации ужасно, а что за БД, если having не работает?
Аватара пользователя
Лесьяр
Редко заходит
 
Сообщения: 148
Зарегистрирован: Вт сен 26, 2006 15:35

Re: SQL запрос

Сообщение Muerto Чт июл 23, 2009 10:43

Jedi А кинь код создания таблицы!
У тебя там данные добавляются или апдейтятся?
Nadie hablara de nosotras cuando hayamos muerto.
www.muerto.ru
Аватара пользователя
Muerto
Растаман
 
Сообщения: 3597
Зарегистрирован: Пн окт 11, 2004 19:09
Откуда: Москва

Re: SQL запрос

Сообщение Jedi Пт июл 24, 2009 9:11

mysql в денвере которая.
Таблицу делал в пхп май админе

С хэвингом он не выбирает ничего
Аватара пользователя
Jedi
Хронический Астматик
 
Сообщения: 1852
Зарегистрирован: Вс сен 08, 2002 0:01
Откуда: Russia

Re: SQL запрос

Сообщение Muerto Пт июл 24, 2009 10:38

Пришли дамп таблицы что-ли.
Nadie hablara de nosotras cuando hayamos muerto.
www.muerto.ru
Аватара пользователя
Muerto
Растаман
 
Сообщения: 3597
Зарегистрирован: Пн окт 11, 2004 19:09
Откуда: Москва

Re: SQL запрос

Сообщение Jedi Пт июл 24, 2009 10:47

Код: Выделить всё
CREATE TABLE test (
  id int(11) NOT NULL auto_increment,
  cur varchar(5) NOT NULL,
  `date` datetime NOT NULL,
  `value` int(11) NOT NULL,
  PRIMARY KEY  (id),
  KEY cur (cur,`date`)
) ENGINE=MyISAM AUTO_INCREMENT=10 DEFAULT CHARSET=cp1251 AUTO_INCREMENT=10 ;
Аватара пользователя
Jedi
Хронический Астматик
 
Сообщения: 1852
Зарегистрирован: Вс сен 08, 2002 0:01
Откуда: Russia

Re: SQL запрос

Сообщение Muerto Пт июл 24, 2009 12:41

Последние обновленные валюты - это как? У тебя праймари кей только по АйДи. Допустим мы выберем последние обновления валюты за последнее обновление даты. Если все валюты в один день обновляются, то хорошо. Иначе выборка только по обновленным:
select * from test where `date`=(select max(`date`) from test);
чтобы использовался индекс надо объявлять не KEY cur (cur,`date`). а KEY cur (`date`,cur) или
UNIQUE KEY cur (`date`,cur), если там не нужны дубликаты
Nadie hablara de nosotras cuando hayamos muerto.
www.muerto.ru
Аватара пользователя
Muerto
Растаман
 
Сообщения: 3597
Зарегистрирован: Пн окт 11, 2004 19:09
Откуда: Москва

Re: SQL запрос

Сообщение Jedi Пт июл 24, 2009 12:48

Нужно чтобы они не повторялись. тлько одна валюта RUB, USD, и EUR вывести их по дате самой максимальной
Аватара пользователя
Jedi
Хронический Астматик
 
Сообщения: 1852
Зарегистрирован: Вс сен 08, 2002 0:01
Откуда: Russia

Re: SQL запрос

Сообщение Padonak Пт июл 24, 2009 15:58

этот топег разрывает мне моск
Uncaught TypeError: Изображение

Изображение
Аватара пользователя
Padonak
Философ-разговорник
 
Сообщения: 3872
Зарегистрирован: Вт дек 13, 2005 3:23
Откуда: Ростов-на-Дону

Re: SQL запрос

Сообщение Muerto Пт июл 24, 2009 18:12

Жалея Падонка и по устной договоренности с Jedi, вопрос, полагаю, имеет быть закрытым.
Nadie hablara de nosotras cuando hayamos muerto.
www.muerto.ru
Аватара пользователя
Muerto
Растаман
 
Сообщения: 3597
Зарегистрирован: Пн окт 11, 2004 19:09
Откуда: Москва


Вернуться в Архив

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 13

cron