Рассчитать диапазон дат между двумя строками - PullRequest
0 голосов
/ 09 сентября 2018

У меня есть таблица, где у меня есть стоимость материалов, которые меняются на основе дат и записываются в таблицу. Пожалуйста, смотрите ниже изображение для более подробной информации. enter image description here

Если вы видите входную таблицу, в первом ряду стоимость материала XYZ составляет 43,14 от '29.06.2008' до '12/31/9999', а во втором ряду снова стоимость материала меняется на 44, и теперь дата от '8/8/2018' и так далее, теперь я хочу получить диапазон дат (dateto) для первой строки на основе даты второй строки fromfrom, которая будет меньше, чем один день от второй даты date ('02.08.2008) '), выделено в обязательной таблице.

Я пробовал внутреннее соединение и другие запросы, но не смог получить требуемый вывод.

1 Ответ

0 голосов
/ 10 сентября 2018

Можете ли вы попробовать с этим?

WITH TEMP AS
(
    SELECT 
        RANK() OVER ( PARTITION BY MATERIAL ORDER BY DATEFROM ASC) AS ASC_RANK,
        RANK() OVER ( PARTITION BY MATERIAL ORDER BY DATEFROM DESC) AS DES_RANK,
        MATERIAL, COST, DATEFROM, DATETO
    FROM 
)
SELECT MATERIAL, COST, DATEFROM, DATETO
FROM TEMP
WHERE DES_RANK = 1 

UNION ALL 

SELECT T1.MATERIAL, T1.COST, T1.DATEFROM, (T2.DATETO - 1) AS DATETO
FROM TEMP T1
JOIN TEMP T2 ON T1.MATERIAL = T2.MATERIAL AND T1.ASC_RANK = (T2.ASC_RANK + 1)
...