Запрос Firebird - включить значение из следующей строки - PullRequest
0 голосов
/ 16 октября 2018

У меня есть таблица со следующими столбцами (очень упрощенная):

CustomerID | ValidFrom | ValidTo
----------------------------------
1          | 20180101  | 20180330
2          | 20180601  | 20181003
1          | 20180212  | 20180313

Я нашел запрос для достижения следующего результата:

CustomerID | ValidFrom
-----------------------
1          | 20180101
1          | 20180212
1          | 20180314
1          | 20180331
2          | 20180601   
2          | 20181004

запрос:

SELECT CustomerID, ValidFrom
FROM table
UNION
SELECT CustomerID, ValidTo + 1
FROM table

Но как мне достичь следующего результата (почти значение из следующего ряда, включенного в предыдущий ряд)?

CustomerID | ValidFrom | ValidTo
---------------------------------
1          | 20180101  | 20180211
1          | 20180212  | 20180313
1          | 20180314  | 20180330
1          | 20180331  | NULL
2          | 20180601  | 20181003
2          | 20181004  | NULL

Большое спасибо!

1 Ответ

0 голосов
/ 16 октября 2018

Результат второго запроса можно получить с помощью оконных функций SQL :

select
    validfrom
  , lag(validfrom,1) over (partition by customerId, order by validFrom)
  from (
      SELECT CustomerID, ValidFrom
      FROM table
      UNION
      SELECT CustomerID, ValidTo + 1
      FROM table
  ) foo
...