Как рассчитать начало и конец и начать каждую новую строку со следующей датой начала - PullRequest
1 голос
/ 05 марта 2019

Я использую этот sql для вычисления начальных и конечных дат:

WITH RankedProcess (ProcessOrder, ProcessDate, Seq) AS
(
  SELECT ProcessOrder, ProcessDate, ROW_NUMBER() OVER(ORDER BY ProcessDate) AS Seq
  From #Temp
)
SELECT  P1.ProcessOrder, P1.ProcessDate AS ProcessBegin, P2.ProcessDate AS ProcessEnd , P1.Seq , P2.Seq
FROM RankedProcess AS P1
  LEFT OUTER JOIN RankedProcess AS P2
    ON P1.Seq = P2.Seq -1

И вывод выглядит так:

enter image description here

Но я тоже хочу, чтобы это выглядело так:

enter image description here

Разные строки, которых там быть не должно (красный):

enter image description here

Как пример: когда в первой строке есть

04.01.2016 - 11.01.2016

следующий ряд должен начинаться с

18.01.2016 - 25.01.2016

Следующая строка должна иметь enddate как startdate.

1 Ответ

0 голосов
/ 05 марта 2019

Ну, так как я не вижу никакой причины, почему это не было бы логически правильно, вы можете просто исключить каждую четную строку:

WITH RankedProcess (ProcessOrder, ProcessDate, Seq) AS
(
  SELECT ProcessOrder, ProcessDate, ROW_NUMBER() OVER(ORDER BY ProcessDate) AS Seq
  From #Temp
)
SELECT  P1.ProcessOrder, P1.ProcessDate AS ProcessBegin, P2.ProcessDate AS ProcessEnd , P1.Seq , P2.Seq
FROM RankedProcess AS P1
  LEFT OUTER JOIN RankedProcess AS P2
    ON P1.Seq = P2.Seq -1
WHERE P1.Seq % 2 = 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...