Как лучше всего работать с данными?

Я пытаюсь отобразить данные как таковые:
В нашей базе данных есть события (с уникальным идентификатором), а затем дата начала. События не пересекаются, и каждое из них начинается с даты окончания предыдущего. Однако у нас нет «даты окончания» в базе данных.
Мне нужно передать данные в другую систему, чтобы она показывала идентификатор события, дату начала и дату окончания (это просто следующая дата начала).

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

По сути это будет:
СобытиеА | Дата1 | Дата2
СобытиеB | Дата2 | Дата3
СобытиеC | Дата3 | Дата4

Мероприятия запланированы на несколько лет вперед, и мне нужно получить запрос только на следующие несколько месяцев, поэтому не беспокойтесь об исчерпании «дат начала следующего события», и, если это имеет значение, этот запрос будет частью вызова веб-сервиса. .

Базовый псевдокод для события и даты будет таким:

select Event.ID, Event.StartDate
from Event
where Event.StartDate > sysdate and Event.StartDate < sysdate+90

По сути, я хочу взять следующую строку Event.StartDate и сделать ее текущей строкой Event.EndDate.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
15
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Используйте аналитическую функцию LEAD:

Настройка Oracle:

Таблица с 10 строками:

CREATE TABLE Event ( ID, StartDate ) AS
  SELECT LEVEL, TRUNC( SYSDATE ) + LEVEL
  FROM   DUAL
  CONNECT BY LEVEL <= 10;

Запрос:

select ID,
       StartDate,
       LEAD( StartDate ) OVER ( ORDER BY StartDate ) AS EndDate
from   Event
where  StartDate > sysdate and StartDate < sysdate+90

Выход:

ID | STARTDATE | ENDDATE  
-: | :-------- | :--------
 1 | 22-JUN-19 | 23-JUN-19
 2 | 23-JUN-19 | 24-JUN-19
 3 | 24-JUN-19 | 25-JUN-19
 4 | 25-JUN-19 | 26-JUN-19
 5 | 26-JUN-19 | 27-JUN-19
 6 | 27-JUN-19 | 28-JUN-19
 7 | 28-JUN-19 | 29-JUN-19
 8 | 29-JUN-19 | 30-JUN-19
 9 | 30-JUN-19 | 01-JUL-19
10 | 01-JUL-19 | null

дб <> рабочий пример здесь

Вау, это просто и элегантно. Понятия не имел ни о «лиде», ни о том, как его искать. Спасибо!

Patrick Gray 21.06.2019 22:37

Другие вопросы по теме