![]() |
|
Модераторы: skyboy |
![]()
|
|
| bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 1 Всего: 315 |
MySQL
что-то я туплю или давноэтим не занимался. есть таблица `reester`, в которой есть записи с полями: `order` int `date` int может быть несколько записей с одинаковым `order` мне нужно получить 10 записей с максимальным `date`, но разным `order` что-то вроде:
но как это бывает при группировке, в date оказывается значение из случайной строчки при группировке. как бы это дело отсортировать, а затем сгруппировать? можно ли одним запросом? |
|||
|
||||
| ТоляМБА |
|
||||
![]() Котэ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1607 Регистрация: 15.12.2004 Репутация: 4 Всего: 252 |
Добавлено @ 16:49 Верхний вариант сработает на одну максимальную дату с 10-ю ордерами, а вот это походу то что надо:
Это сообщение отредактировал(а) ТоляМБА - 25.8.2014, 16:54 |
||||
|
|||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: нет Всего: 386 |
-------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
| ТоляМБА |
|
|||
![]() Котэ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1607 Регистрация: 15.12.2004 Репутация: 4 Всего: 252 |
ksnk, к твоему коду надо также добавить
Это сообщение отредактировал(а) ТоляМБА - 25.8.2014, 17:37 |
|||
|
||||
| bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 1 Всего: 315 |
SELECT DISTINCT `order`, `date`
FROM `reester` ORDER by `date` DESC LIMIT 10 в полной мере работает а я уже и забыл это слово спасибо большое |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 45 Всего: 454 |
Результат не соответствует исходной задаче. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| ТоляМБА |
|
|||
![]() Котэ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1607 Регистрация: 15.12.2004 Репутация: 4 Всего: 252 |
||||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 45 Всего: 454 |
1) Записей с максимальной date может быть менее 10. Тогда в выборке будут записи с датой, отличной от максимальной, хотя по условию дата должна быть максимальной.
2) При этом в записях с разным date могут быть записи с одинаковым order, хотя по условию они обязаны быть разными. 3) Если date у 10 и 11 записей при сортировке по date совпадают, результат запроса недетерминирован. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| ТоляМБА |
|
|||
![]() Котэ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1607 Регистрация: 15.12.2004 Репутация: 4 Всего: 252 |
Akina, хорошо. Твои предложения какие?
|
|||
|
||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: нет Всего: 386 |
а такое, вроде работает.
в mysql что, DISTINT это DISTINCT ROWS? Блин, надо бы документацию почитать P.S. добавил DESC в сортировку Это сообщение отредактировал(а) ksnk - 27.8.2014, 09:38 -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 45 Всего: 454 |
ОписАть задачу АБСОЛЮТНО ТОЧНО. Включая и то, что делать во всех указанных (и неуказанных тоже) "нестандартных" случаях. Смотря где применять. Если SELECT DISTINCT fields - то да. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 1 Всего: 315 |
задача, конечно, не о 10 записях.
есть реестр, в который вносятся записи. поле order обозначает привязку к таблице заказов orderlist.id, а в поле date вносится текущее время timestamp. впоследствии поле date обновляется, если вносится ещё подобная запись на тот же order. при этом на один order может быть несколько записей (они отличаются друг от друга другими полями). задача получить постраничный вывод свежеобновлённых заказов на основе реестра. то есть получить 10 заказов имеющих максимальный date в одной из относящейся к ним записи. (чтоб не было лишней риторики, данную задачу нельзя выполнить простым добавлением поля date непосредственно в таблицу orderlist по ряду причин. реестр - суть вспомогательная табличка, хранящая короткий список актуальных заказов, в то время как самих заказов в orderlist дофигища, а по реестру проводится быстрый поиск по куче вычисленных параметров WHERE.) |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 45 Всего: 454 |
Ага, задача класса "выбрать последнюю запись для группы"... тогда в полный рост встаёт вопрос об используемой СУБД.
На "взрослых" (MS SQL, Oracle, etc.) задачу наиболее эффективно решать используя оконные функции. Если же они в используемой СУБД не реализованы, то используются различные обходные манёвры, причём выбор наиболее эффективного решения начинает зависеть от структуры хранения данных (в частности, наличие индексов) и вообще от особенностей конкретной СУБД. Поскольку у тебя используется MySQL - предлагаю почитать FAQ: Выборка первой/последней записи в группах, где возможные пути решения неплохо разобраны. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Составление SQL-запросов | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |