Разница в дате между последовательными строками

#sql #oracle

#sql #Oracle

Вопрос:

У меня есть таблица со следующей структурой

 RetailerCode   Orderdate
1001           01-JUL-16
1001           04-JUL-16
1001           06-JUL-16
  

Я хочу этот вывод

 1001      10/9/2011 - 12/9/2011     2 days
1001      12/9/2011 - 20/9/2011     8 days
1001      20/9/2011                 NA
  

Комментарии:

1. В вашем примере данных нет RetailerCode 1001. Я предполагаю, что это то, что должна представлять первая строка вашего вывода. Итак, как вы переходите от образца данных к ожидаемому результату?

2. В вашем примере данные за июль, но результат за сентябрь. Не могли бы вы отредактировать вопрос, чтобы лучше объяснить вашу потребность?

Ответ №1:

Это выглядит как простые аналитические функции

 select RetailerCode, tO_char(Orderdate,'DD/mm/YYYY')||nvl2(next_Orderdate,' - '||tO_char(next_Orderdate,'DD/mm/YYYY'),'') Orderdate_diff, nvl(to_char(next_Orderdate - Orderdate),'NA') count_days from 
(select RetailerCode, Orderdate,  
                      lead(Orderdate) over (partition by RetailerCode order by Orderdate) next_Orderdate from YOUR_TABLE
 )
  

Комментарии:

1. Вы пробовали это? Я считаю, что это приведет к ошибке

2. @Michael Piankov Большое тебе спасибо

3. @kumarh, позвольте мне рассказать вам некоторые основы о Stackoverflow. Когда кто-то пишет ответ, и ответ работает для вас, пожалуйста, примите ответ ( Смотрите здесь описание того, как принимать ответы ). У вас много вопросов, на которые вы прокомментировали ответ вместо принятия.