我有一个表格,其中有材料成本,该材料成本根据日期进行更改并记录到表格中。 请参阅下图以了解更多详细信息。
如果您看到输入表,则第一行中的物料XYZ成本从'6/29/2018'到'12 / 31/9999'为43.14,第二行中的物料成本再次变为44,现在的起始日期为'8/3/2018',依此类推,现在我想根据第二行datefrom获取第一行的日期范围(dateto),该日期范围比第二日期from('8/2/2018 '),在必需的输出表中突出显示。
我尝试了内部联接和其他查询,但是无法获得所需的输出。
答案 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)