Модераторы: skyboy

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> GROUP BY ORDER BY составить запрос 
:(
    Опции темы
ZloiKombat
Дата 19.2.2011, 22:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 19.2.2011

Репутация: нет
Всего: нет



Всем привет. 
Может на этом форуме кто то помочь разобраться с выборкой и ранжированием значений? 
Обращался на другой форум, смогли помочь только частично, надеюсь тут есть профессионалы, хорошо знающие MySQL. 
Еть поля: 

id | login | time 
1 | log1 | 10 
2 | log1 | 15 
3 | log2 | 100 
4 | log2 | 80 
5 | log3 | 11 
6 | log4 | 8 

Нужно сгруппировать по столбцу login что бы сгруппировалось по максимальному time , вот так 

id | login | time 
3 | log2 | 100 
2 | log1 | 15 
5 | log3 | 11 
6 | log4 | 8 

Подсказали мне вот такой код 

SELECT `login`, max(`time`) AS `time` FROM `tabl` GROUP BY `login` ORDER BY 2 DESC 

Он работает так как мне и было нужно, но есть одно НО 
При этом коде выводится только 2 поля login и time, остальные поля не могу выбрать. 
Подскажите как правильно создать запрос, что бы работал аналогично приведенному выше, 
но что бы можно было делать выборку всех полей. (их больше чем в примере). 
Надеюсь на ваш проффесионализм
PM MAIL   Вверх
chip_and_dayl
Дата 19.2.2011, 23:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 603
Регистрация: 22.4.2007
Где: Украина, Киев

Репутация: нет
Всего: 9



Как вариант вот это, точнее результат этого
Код

SELECT `login`, max(`time`) AS `time` FROM `tabl` GROUP BY `login` ORDER BY 2 DESC 


объединяем с таблицей   tabl по полям тайм и логин.

Добавлено через 1 минуту и 46 секунд
То беж должно выйти что-то типа


Код

select * from tabl
inner join
(SELECT `login`, max(`time`) AS `time` FROM `tabl` GROUP BY `login` ORDER BY 2 DESC ) t
               ON t.Login=tabl.Login and t.Time=tabl.Time



--------------------
Фсё будет хорошо!!!
PM MAIL Skype   Вверх
Akina
Дата 20.2.2011, 00:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 454



Совершенно стандартный подход... сколько тут аналогичных тем... только order by  в подзапросе не нужен...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Данкинг
Дата 20.2.2011, 01:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 1
Всего: 130



Пример так, синтаксиса MySQL не знаю:
Код

select * from tabl where time in (SELECT max(`time`) AS `time` FROM `tabl` GROUP BY `login`)



--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
ZloiKombat
Дата 20.2.2011, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 19.2.2011

Репутация: нет
Всего: нет



Цитата(chip_and_dayl @  19.2.2011,  23:25 Найти цитируемый пост)
select * from tabl
inner join
(SELECT `login`, max(`time`) AS `time` FROM `tabl` GROUP BY `login` ORDER BY 2 DESC ) t
               ON t.Login=tabl.Login and t.Time=tabl.Time


При таком коде сбивается сортировка вывод идет в хаотичном порядке
PM MAIL   Вверх
Zloxa
Дата 20.2.2011, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



stff бабушкин метод
Цитата(Данкинг @  20.2.2011,  01:13 Найти цитируемый пост)
Пример так, 

Код

select * from tabl where (login,time) in (SELECT login,max(`time`) AS `time` FROM `tabl` GROUP BY `login`)


Это сообщение отредактировал(а) Zloxa - 20.2.2011, 13:24


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
ZloiKombat
Дата 20.2.2011, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 19.2.2011

Репутация: нет
Всего: нет



Цитата(Данкинг @  20.2.2011,  01:13 Найти цитируемый пост)
select * from tabl where time in (SELECT max(`time`) AS `time` FROM `tabl` GROUP BY `login`)


Подвешивает хост

Добавлено через 11 минут и 17 секунд
Цитата(Zloxa @  20.2.2011,  13:18 Найти цитируемый пост)
select * from tabl where (login,time) in (SELECT login,max(`time`) AS `time` FROM `tabl` GROUP BY `login`)


Так же, хост уходит в вечный вис, приходится делать перезапуск
PM MAIL   Вверх
Zloxa
Дата 20.2.2011, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



Цитата(ZloiKombat @  20.2.2011,  13:16 Найти цитируемый пост)
При таком коде сбивается сортировка вывод идет в хаотичном порядке 

Самостоятельно дописать ордербай - чего не хватает?


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
ZloiKombat
Дата 20.2.2011, 13:35 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 19.2.2011

Репутация: нет
Всего: нет



Цитата(Akina @  20.2.2011,  00:25 Найти цитируемый пост)
Совершенно стандартный подход... сколько тут аналогичных тем... только order by  в подзапросе не нужен... 


Если это совершенно стандартный подход, подсказали бы правильный запрос...

Добавлено через 2 минуты и 20 секунд
Цитата(Zloxa @  20.2.2011,  13:33 Найти цитируемый пост)
Цитата(ZloiKombat @  20.2.2011,  13:16 )
При таком коде сбивается сортировка вывод идет в хаотичном порядке 


Самостоятельно дописать ордербай - чего не хватает?


Вывод идет и хаотично в группах сформированых по тайм и вывод самих групп.
Если бы я мог самостоятельно это побороть, я бы не обратился за помощью
PM MAIL   Вверх
Zloxa
Дата 20.2.2011, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



Цитата(ZloiKombat @  20.2.2011,  13:35 Найти цитируемый пост)
Вывод идет и хаотично в группах сформированых по тайм и вывод самих групп.

Я не понял ничегошеньки из сказаного, но мне кажется, что тут нет ни стлова о том, что именно не устраиват в полученном результате, потому у меня возникают сомнения в том, что Вы пытались его изучить.

Порпобуйте упораядочить хаос както так:
Код

select * from tabl
inner join
(SELECT `login`, max(`time`) AS `time` FROM `tabl` GROUP BY `login` ) t
               ON t.Login=tabl.Login and t.Time=tabl.Time
ORDER BY id 


Цитата(ZloiKombat @  20.2.2011,  13:35 Найти цитируемый пост)
Если бы я мог самостоятельно это побороть, я бы не обратился за помощью 

Правослово, прежде чем обращаться за помощью, следовало бы хоть чуть чуть ознакомиться с синтаксисом языка, на котором программируете. Иначе речь идет не о помощи, а в деланье за Вас.

Добавлено @ 13:49
И, пожалуйса, впредь, постарайтесь воздерживаться от подобных формулировок:
Цитата(ZloiKombat @  19.2.2011,  22:54 Найти цитируемый пост)
 надеюсь тут есть профессионалы, хорошо знающие

Цитата(ZloiKombat @  19.2.2011,  22:54 Найти цитируемый пост)
Надеюсь на ваш проффесионализм 


Возможно вы полагаете что так вы можете когонить на чтонить мотивировать. На самом же деле, вы настраиваете против себя тех, кто захочет попытаться оказать Вам помощь.

Это сообщение отредактировал(а) Zloxa - 20.2.2011, 13:59


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Данкинг
Дата 20.2.2011, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 1
Всего: 130



Цитата(ZloiKombat @  20.2.2011,  13:21 Найти цитируемый пост)
Подвешивает хост

 smile 
Я на фоксе тестил - отлично работает. smile 


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Zloxa
Дата 20.2.2011, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



Цитата(Данкинг @  20.2.2011,  14:13 Найти цитируемый пост)
Я на фоксе тестил - отлично работает. 

плохо тестил  smile

Добавлено через 1 минуту и 17 секунд
в смысле синтаксически вроде все верно, а вот результат только похож на правильный (если я правильно понял ожидания ТС)


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
ZloiKombat
Дата 20.2.2011, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 19.2.2011

Репутация: нет
Всего: нет



Zloxa, 

Жаль что вы не поняли, попробую на пальцах обьяснить

Я от кода ожидаю вот такой вывод

id | login | time 
3 | log2 | 100 
2 | log1 | 15 
5 | log3 | 11 
6 | log4 | 8 

А выводит так

id | login | time 
1 | log1 | 10 
4 | log2 | 80 
5 | log3 | 11 
6 | log4 | 8 

То бишь группирует не по максимальному time и потом сгруппированые результаты так же выводит не в убывающем порядке по колонке time

Теперь о том помощь или деланье. Я не просил создавать мне законченный веб сценарий, а попросил помощь составить один единственный запрос который будет одним из винтиков в обьемном веб сценарии.
Если вы считаете что составление одного запроса это не помощь, а делание за меня, это ваше право, у меня по этому поводу несколько иное мнение.

Теперь обьясните мне, почему я должен был воздержаться от обращения к людям, которые хорошо знают MySQL?
Люди которые начинают изучение MySQL не смогут мне помочь в этой ситуации, а методом тыка ставить запросы которые подвешивают хост, нет никакого желания, так как я при этом могу терять посетителей.
P.S Не спрашивайте почему я не делаю это на локальном хосте, есть на это свои причины

Добавлено через 4 минуты и 35 секунд
Данкинг,  Возможно проблема в колличестве строк. Вы тестили при каком колличестве строк?
У меня их на данный момент в таблице около 50,000
PM MAIL   Вверх
Zloxa
Дата 20.2.2011, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



Цитата(ZloiKombat @  20.2.2011,  14:19 Найти цитируемый пост)
А выводит так

простите,  я вам не верю. 
Предложенный chip_and_dayl запрос содержит лишний ордер бай, но должен давать правильный результат.
Вероятно вы чтото не то делаете, либо это баг.
Код

SQL> with tabl as (
  2    select 1 id, 'log1' login, 10 time from dual
  3    union all select 2 , 'log1' , 15 from dual
  4    union all select 3 , 'log2' , 100 from dual
  5    union all select 4 , 'log2' , 80 from dual
  6    union all select 5 , 'log3' , 11 from dual
  7    union all select 6 , 'log4' , 8 from dual
  8  )
  9  select tabl.* from tabl
 10  inner join
 11  (SELECT login, max(time) AS time FROM tabl GROUP BY login ) t
 12                 ON t.Login=tabl.Login and t.Time=tabl.Time
 13  order by tabl.time desc
 14  ;
 
        ID LOGIN       TIME
---------- ----- ----------
         3 log2         100
         2 log1          15
         5 log3          11
         6 log4           8



Цитата(ZloiKombat @  20.2.2011,  14:19 Найти цитируемый пост)
Теперь обьясните мне, почему я должен был воздержаться от обращения к людям, которые хорошо знают MySQL?

Я не могу объяснить почему, но прочитав эти формулировки у меня по отношению к вам сфомрировался стойкий негатив. Потому я и рекомендовал Вам воздержаться от подобного тона формулировок. Ваше право пренебречь моими рекомендациями. 

Цитата(ZloiKombat @  20.2.2011,  14:19 Найти цитируемый пост)
Люди которые начинают изучение  MySQL не смогут мне помочь в этой ситуации

Здесь вы ошибаетесь. Задача новичковая. Настоящие гуру отвечали на подобный вопрос уже стопиццот раз и он им уж изрядно обрыд. А вот новички - вполне могут помочь, дать ценную идею. Так же не стоит забывать и о тех, кто вообще ни разу в глаза не видел mySQL, но таки могут помочь.


Это сообщение отредактировал(а) Zloxa - 20.2.2011, 14:55


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Zloxa
Дата 20.2.2011, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



Цитата(ZloiKombat @  20.2.2011,  14:19 Найти цитируемый пост)
 а методом тыка ставить запросы которые подвешивают хост

Не надо методом тыка. Надо изучать материалы и думать прежде чем делать.  smile

Добавлено @ 15:04
Этот запрос, кстати, тоже должен бы дать верный результат   smile 

Это сообщение отредактировал(а) Zloxa - 20.2.2011, 15:05


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




[ Время генерации скрипта: 0.0636 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.