У меня есть таблица предметов, с каждым из которых связана дата. Если у меня есть дата, связанная с одним элементом, как я могу запросить базу данных с помощью SQL, чтобы получить «предыдущий» и «последующий» элементы в таблице?
Невозможно просто добавить (или вычесть) значение, поскольку даты не имеют регулярного разрыва между ними.
Одним из возможных приложений могут быть ссылки «предыдущий / следующий» в фотоальбоме или веб-приложении блога, где основные данные находятся в таблице SQL.
Я думаю, что есть два возможных случая:
Во-первых , где каждая дата уникальна:
Пример данных:
1,3,8,19,67,45
Какой запрос (или запросы) будет давать 3 и 19, если в качестве параметра указано 8? (или строки 3,8,19). Обратите внимание, что не всегда нужно возвращать три строки - в конце последовательности одна будет отсутствовать.
Во-вторых , если существует отдельный уникальный ключ для упорядочения элементов, по какому запросу возвращается набор, окружающий дату? Ожидаемый заказ - по дате, затем по ключу.
Пример данных:
(key:date) 1:1,2:3,3:8,4:8,5:19,10:19,11:67,15:45,16:8
Какой запрос для '8' возвращает набор:
2:3,3:8,4:8,16:8,5:19
или какой запрос генерирует таблицу:
key date prev-key next-key
1 1 null 2
2 3 1 3
3 8 2 4
4 8 3 16
5 19 16 10
10 19 5 11
11 67 10 15
15 45 11 null
16 8 4 5
Порядок таблиц не важен - только поля следующего и предварительного ключа.
У TheSoftwareJedi и Cade Roux есть решения, которые работают с наборами данных, которые я выложил вчера вечером. По второму вопросу оба набора данных для этого набора данных кажутся неудачными:
(key:date) 1:1,2:3,3:8,4:8,5:19,10:19,11:67,15:45,16:8
Ожидаемый порядок - по дате, а затем по ключу, поэтому один ожидаемый результат может быть:
2:3,3:8,4:8,16:8,5:19
и еще:
key date prev-key next-key
1 1 null 2
2 3 1 3
3 8 2 4
4 8 3 16
5 19 16 10
10 19 5 11
11 67 10 15
15 45 11 null
16 8 4 5
Порядок таблиц не важен - только поля следующего и предварительного ключа.