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

Поиск:

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


Новичок



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

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



Zloxa, Вставил строку запроса из вашего показа таблицы и о чудо, вывод вышел именно так как мне нужно, но радость моя была кратковременной, в выводе некоторые строки дублируются, не все а некоторые , почему не знаю, вывод получился такой

        ID LOGIN       TIME
---------- ----- ----------
         3 log2         100
         2 log1          15
         2 log1          15
         5 log3          11
         6 log4           8


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


Yersinia pestis
****


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

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



Цитата(Zloxa @  20.2.2011,  14:17 Найти цитируемый пост)
в смысле синтаксически вроде все верно, а вот результат только похож на правильный (если я правильно понял ожидания ТС) 

Да, вот так лучше:
Код

SELECT * from DBF() WHERE time in (SELECT max(time) AS time1 FROM DBF() GROUP BY login) ORDER BY time desc

user posted image

Добавлено через 1 минуту и 32 секунды
Цитата(ZloiKombat @  20.2.2011,  15:28 Найти цитируемый пост)
в выводе некоторые строки дублируются

Тогда так:
Код

SELECT dist time,login from DBF() WHERE time in (SELECT max(time) AS time1 FROM DBF() GROUP BY login) ORDER BY time desc



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


Чо?
****


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

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



Цитата(ZloiKombat @  20.2.2011,  15:28 Найти цитируемый пост)
почему не знаю

Есть две мысли.
Первая - маловероятная. Id - не уникален а значения log1 различаются русской буквой "o" или же какимнить завершающим пробелом
Вторая - невероятная, что пара (login,time) - не уникальна(при этом id - тоже). Невероятно потому, что Вы утверждали обратное.


Данкинг, так будет работать только если time уникален.

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


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


Новичок



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

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



Последний пример не смог заставить работать.

Zloxa, 
time уникален, для значения login
То есть связка login + time уникальна, а сам time имеет повторения для других значений login

Вот все таки мне подсказали код, который работает четко так, как мне было нужно,
вот он
Код

SELECT t2.* FROM (SELECT `login`, max(`time`) AS `time` FROM `tabl` GROUP BY `login`) t1 JOIN tabl t2 USING(login,time) ORDER BY t1.time DESC


Единственный минус генерация страницы повышена в среднем по сайту генерация ~0,05 а на странице с кодом 0,1
(индексы на поля login и time стоят)
PM MAIL   Вверх
Zloxa
Дата 20.2.2011, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


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

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



Цитата(ZloiKombat @  20.2.2011,  17:19 Найти цитируемый пост)
Вот все таки мне подсказали код, который работает четко так, как мне было нужно,
вот он

вы не поверите, но он полностью эквивалентен тому, который, по вашим словам выдает вам дублирующиеся записи.
Цитата(ZloiKombat @  20.2.2011,  17:19 Найти цитируемый пост)
индексы на поля login и time стоят

Должен стоять на пару и индекс должен быть уникальным.  И нужен этот индекс не для увеличения производительности, а для обеспечения гарантии уникальности пары (login,time).
К сожалению данный тип запросов - не тот случай, когда построение нужного индекса сможет на порядки увеличить производительность. Использование индекса, быть может, позволит лишь слега сократить время вычисления группировки. Еще совсем немного спичек можно было бы сэкономить используя ранее рекомендвоанный мною "бабушкин метод". Однако проза жизни такова, что чем больше даннах подлежащих обработке этим запросом, тем дольше он будет выполняться. И с этим ничего не поделаешь.

Единственный совет, какой я мог бы вам дать в данной ситуации - создать отдельную табличку, в которой сохранять преаггрегацию, которую выполнять в триггерах при модификации, добавлении, удалении данных из вашей таблички. Однако в реализации подобного механизма есть пара тонких моментов, которые следует учитывать и, которые, боюсь, вам будет весьма не просто реализовать.


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


Новичок



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

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



Zloxa, Вы правы на счет запроса. Тот запрос который я указал, тоже дублирует некоторые строки(((
На счет id вы не правы. Это примари с автоикрементом.
На счет пары login+time,маловероятно что он не уникален. time записывается в формате юникс, если может пользователь сделать два обращения к странице в одну единицу времени то может и не уникальна связка.
На счет индекса. Сделал связку login+time генерация страницы снизилась до 0.05 так что это действенно.
По поводу уникальности связки индекса хорошая идея, щас сделаю индекс уникальным, возможно это и исключит дублирование строк
PM MAIL   Вверх
Zloxa
Дата 20.2.2011, 20:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


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

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



Цитата(ZloiKombat @  20.2.2011,  20:10 Найти цитируемый пост)
это действенно.

я лишь хотел обратить ваше внимание, что с разрастанием базы вы все равно получите тут проблему. Если ваша система на столько нагружена, что изменение времени отклика с 0,1 на 0,05 оказывается ощутимым, то такому запросу не место в такой системе.

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


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


 




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


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

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