SQL запрос

Все, связанное с web-строительством.

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

SQL запрос

Сообщение Jedi Ср июл 22, 2009 20: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
Хронический Астматик
 
Сообщения: 1853
Зарегистрирован: Вс сен 08, 2002 1:01
Откуда: Russia

Re: SQL запрос

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

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

Re: SQL запрос

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

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

Re: SQL запрос

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

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

Re: SQL запрос

Сообщение Jedi Чт июл 23, 2009 0:13

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

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

Re: SQL запрос

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

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

Re: SQL запрос

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

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

Re: SQL запрос

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

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

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

Re: SQL запрос

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

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

Re: SQL запрос

Сообщение Jedi Пт июл 24, 2009 11: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
Хронический Астматик
 
Сообщения: 1853
Зарегистрирован: Вс сен 08, 2002 1:01
Откуда: Russia

Re: SQL запрос

Сообщение Muerto Пт июл 24, 2009 13: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
Растаман
 
Сообщения: 3596
Зарегистрирован: Пн окт 11, 2004 20:09
Откуда: Москва

Re: SQL запрос

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

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

Re: SQL запрос

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

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

Изображение
Аватара пользователя
Padonak
Табачный магнат
 
Сообщения: 3856
Зарегистрирован: Вт дек 13, 2005 4:23
Откуда: Ростов-на-Дону

Re: SQL запрос

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

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


Вернуться в Web-мастеринг

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

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

cron