У меня есть таблица, содержащая несколько столбцов, и я хочу проверить значение столбца, выбирать строки после этого значения столбца, пока не появится отдельное значение столбца. Я попытался с помощью BETWEEN
, но если значения столбца являются целыми числами, он ищет только числа между целыми числами.
Например, если у меня есть такая таблица:
значение времени идентификатора t1 12:00 PM 15 t1 12:02 PM 4 t1 12:03 PM 7 t1 12:05 PM 16 t5 12:10 250 t5 12:15 15 t8 11:00 15 t8 3:00 PM 2 t8 15:05 100 t2 7:00 вечера 15 t2 7:01 PM 16 t15 5:00 AM 35
Я хотел бы получить строки между значениями 15 и 16. В принципе, если бы я мог отсортировать по id
, то time
и собирать строки после появления 15, пока не будет значение 16 в том же самом id
. Если значения 16 нет, я хотел бы, например, следующие 100 строк, а затем искать следующее значение 15.
Я хотел бы запрос вернуть это:
значение времени идентификатора t1 12:00 PM 15 t1 12:02 PM 4 t1 12:03 PM 7 t1 12:05 PM 16 t2 7:00 вечера 15 t2 7:01 PM 16 t5 12:15 15 t8 11:00 15 t8 3:00 PM 2 t8 15:05 100
Это может сбивать с толку. Я пробовал:
SELECT * FROM table WHERE value BETWEEN '15' AND '16' ORDER BY id, time
в качестве отправной точки, но это только возвращает строки со значениями 15 или 16, потому что они являются целыми числами.
Я хочу отсортировать таблицу к тому id
времени time
. Эти записи добавляются автоматически через другую систему, поэтому я пытаюсь запросить таблицу для определенных диапазонов значений.
Любые идеи?
Разъяснение:
Если бы я имел строки с 15, 1, 16, 7, 15, 2, 16
для того же id
, я хотел бы как «острова»: 15, 1, 16, 15, 2, 16
.
источник
Ответы:
Предложение, которое должно работать в версии 2008 года.
Протестировано на rextester.com :
Больше информации:
источник
источник
COUNT(*) OVER (ORDER BY ..)
допускается