计算两行之间的日期范围

时间:2018-09-09 19:38:07

标签: mysql sql mysql-workbench

我有一个表格,其中有材料成本,该材料成本根据日期进行更改并记录到表格中。 请参阅下图以了解更多详细信息。 enter image description here

如果您看到输入表,则第一行中的物料XYZ成本从'6/29/2018'到'12 / 31/9999'为43.14,第二行中的物料成本再次变为44,现在的起始日期为'8/3/2018',依此类推,现在我想根据第二行datefrom获取第一行的日期范围(dateto),该日期范围比第二日期from('8/2/2018 '),在必需的输出表中突出显示。

我尝试了内部联接和其他查询,但是无法获得所需的输出。

1 个答案:

答案 0 :(得分:0)

您可以尝试吗?

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)