我想创建一个视图,它会插入Missing Month并将上个月的数据复制到缺失的月份。
例如,我有三列以下,因为您可以看到第4和第7个缺失,所以在月份4个月将复制3个数据,并在7个月内复制6个数据
我想指定最短和最长日期
CID-----PID-----Time
2222-----7------06-03-2015
2222-----7------08-05-2015
2222-----7------29-05-2015
2222-----8------01-06-2015
2222-----8------01-06-2015
2222-----8------11-08-2015
2222-----8------11-08-2015
2222-----8------20-08-2015
3539 5 17-04-2015
3539 8 12-08-2015
4987 10 06-03-2015
4987 12 01-06-2015
4987 13 17-07-2015
我想在View
中输出这样的内容CID---- PID---Time
2222--- 7-----201503
2222--- 7-----201504
2222----7-----201505
2222----8-----201506
2222----8-----201507
2222----8-----201508
3539 5 201504
3539 5 201505
3539 5 201506
3539 5 201507
3539 8 201508
4987 10 201503
4987 10 201504
4987 10 201505
4987 12 201506
4987 13 201507
4987 13 201508
发布了类似的问题/答案,但我无法申请。
SQL select, pad with chronological missing months
答案 0 :(得分:0)
我认为你可以使用这个:
WITH
m AS
(SELECT ADD_MONTHS((SELECT MIN(TRUNC(MON_TIME, 'MM')) FROM My_Table), LEVEL-1) AS all_months
FROM dual
CONNECT BY ADD_MONTHS((SELECT MIN(TRUNC(MON_TIME, 'MM')) FROM My_Table), LEVEL-1) <= (SELECT MAX(MON_TIME) FROM My_Table))
SELECT DISTINCT
NVL(CID, LEAD(CID, 1) OVER (ORDER BY all_months)) AS CID,
NVL(PID, LEAD(PID, 1) OVER (partition by CID ORDER BY all_months)) AS PID,
TO_CHAR(all_months, 'YYYYMM') AS TIME
FROM m
LEFT OUTER JOIN My_Table ON TRUNC(MON_TIME, 'MM') = all_months
ORDER BY 3;
CID PID TIME
2222 7 201503
2222 7 201504
2222 7 201505
2222 8 201506
2222 8 201507
2222 8 201508