![]() |
Модераторы: skyboy |
![]() ![]() ![]() |
|
Kizja |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 81 Регистрация: 15.7.2007 Репутация: нет Всего: нет |
Здрасте, помогите пожалуйста составить запрос:
допустим есть таблица в которой 2 колонки: 1. id - он же primary key и 2. number - какое-нибудь число. И допустим у нас 10 записей: id number 1 100 2 300 3 500 4 500 5 300 6 100 7 300 8 300 9 100 10 100 Задача в том, чтобы из этого получить записи с номерами: id number 1 100 2 300 3 500 5 300 6 100 7 300 9 100 Т.е. другими словами надо выкинуть из запроса те, у которых number равен number в следующей записи. |
|||
|
||||
Fin |
|
||||
![]() Дракон->Спать(); ![]() ![]() Профиль Группа: Участник Сообщений: 687 Регистрация: 4.1.2006 Репутация: нет Всего: 10 |
Судя по этой логике, не должна попасть в таблицу записи с id = 3, 7, 9. Но у тебя в таблице они присутствуют. Примерно запрос должен выглядеть так.
Точно определи условия задачи. И корректируй соответственно запрос. Это сообщение отредактировал(а) Fin - 2.11.2007, 23:53 -------------------- Пролетал мимо. |
||||
|
|||||
Kizja |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 81 Регистрация: 15.7.2007 Репутация: нет Всего: нет |
Fin,
спасибо за ответ, я немного изменил твой пример и получилось такое:
Т.е. чтобы он про первый элемент бы тоже не забыл, но вот проблема в том, что если используется условие: "id = qid-1" и поскольку нету всё же гарантии, что id будут обязательно по порядку, увеличиваясь на 1, то эта конструкция может дать сбой. Может есть какой-то вариант понадёжнее? |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
Бред, бред и еще раз бред. Не существует порядка записей, пока не указана сортировка. Неужели ты думаешь, что если ты сделаешь из первичной таблицы выборку select * from table, то всегда в результирующем наборе записи будут располагаться в порядке возрастания значений ID? Щазз! Так что задача твоя... ладно, скажу политкорректно - не до конца сформулирована.
И вообще нет гарантии, что они будут идти строго по возрастанию - вот что главное. Будь у тебя к каждой записи что-то... ну скажем штамп времени... -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
Kizja |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 81 Регистрация: 15.7.2007 Репутация: нет Всего: нет |
Хорошо, если предположить, что в таблице так же есть колонка time, то можно ли тогда реализовать эту задачу? – т.е. упорядочив по времени чтобы не было бы подряд двух одинаковых значений в колонке Num – если данный Num равен предыдущему, то не берётся.
|
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
Конечно можно. Причем не очень сложно. Объясню на словах родственную задачу. Для начала перемножим таблицу саму на себя. Просто получим исходный материал. Одновременно для каждой строки посчитаем разницу штампов времени записей из первой и второй копий таблицы. Затем из этой таблицы сделаем выборку с группировкой по элементам первой копии, причем только тех записей, для которых подсчитанная разница штампов времени положительна и при этом минимальна в группе. Т.е. фактически мы получим в каждой строке пару предыдущее-последующее. А если еще и наложить требование неравенства значений - то получим только те строки, в которых данные из первой копии соответствуют заданным условиям. Единственный недостаток такого подхода - не будет строки, в которой в первой копии находятся данные самой последней записи. Однако легкая модификация ОПИСАННОГО способа получения данных позволит легко устранить эту проблемку. Удачи! -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
![]() ![]() ![]() |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | MySQL | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |