У меня есть таблица элементов, каждая из которых имеет дату, связанную с ней. Если у меня есть дата, связанная с одним элементом, как я могу запросить базу данных с 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
Порядок таблиц не важен - только поля next-key и prev-key.
Оба 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
Порядок таблиц не важен - только поля next-key и prev-key.