Используйте MySQL, чтобы выбрать следующую запись после соответствующего значения без последовательного RowID

273
Martini002

Как выбрать все строки рядом со строкой, соответствующей условию? Но, учитывая, что не существует последовательного RowID, подобного ID Field

Это структура таблицы с 10 строками, но в будущем число строк будет увеличиваться.

Простой текст:

ID Date N1 1 DateTime 9  2 DateTime 2 3 DateTime 5 4 DateTime 9 5 DateTime 3 6 DateTime 6 7 DateTime 7 8 DateTime 9 20 DateTime 3 //Sequence broken 21 DateTime 9 

Примечание. Строка «DateTime» - это просто символ, это будет любой DateTime.

Я пытаюсь узнать первый номер N1 после числа: 9

Я пробовал несколько способов, но результат не то, что мне нужно.

Ожидаемый результат:

ID Date N1 2 DateTime 2 5 DateTime 3 20 DateTime 3 

Простой способ добиться этого был опубликован в этом вопросе, но только если RowID сохраняет последовательность.

1

1 ответ на вопрос

0
Pimp Juice IT

Вы можете создать две Временные таблицы с одной, используя переменную, @row_numсоздающую индекс для номера строки, и вы будете увеличивать каждую на одну независимо от RowIDзначений. Затем из этой временной таблицы вы выберете ту, в row_num+1которой N1значение равно 9. Оттуда вы явно выбираете столбцы idи, N1где row_numзначения совпадают, давая вам желаемый результат.

SQL-запрос

SET @row_num:=0; DROP TABLE IF EXISTS t1; CREATE TEMPORARY TABLE t1 (SELECT @row_num:=@row_num+1 AS row_num, id, N1 FROM numbers);  DROP TABLE IF EXISTS t2; CREATE TEMPORARY TABLE t2 (Select row_num+1 as row_num FROM t1 WHERE N1 = 9);  SELECT id, N1 FROM t1 WHERE row_num IN (Select * From t2); 

подтверждение

Выбрать * Из чисел ( RowIDсравнявшись 5здесь отсутствует)

enter image description here

Выше SQL-запроса

enter image description here


Дополнительные ресурсы