मैंने your_table का उपयोग outerjoin
. के साथ एक तालिका के रूप में किया है , जैसा प्रयोग किया गया last_value
पिछला डेटा डालने के लिए, इस पर एक नज़र डालें :)
SELECT last_value(m.data ignore nulls) over (order by n.mydate) data,
n.mydate
FROM
(SELECT DATA, mydate FROM your_table
) m,
(SELECT TRUNC(SYSDATE, 'MM')-1+LEVEL mydate FROM dual CONNECT BY LEVEL <= 30
)n
WHERE m.mydate(+) = n.mydate
ORDER BY n.mydate;
आप lag()
. का उपयोग कर सकते हैं कार्य भी करता है, लेकिन यह डेटा नहीं भरेगा यदि दिनांक अंतराल एक से अधिक है।, यह केवल तत्काल पिछले डेटा को भरता है,
nvl(m.data, lag(m.data)over(order by n.mydate))
-संपादन -
आपके डेटा के लिए:
SELECT n.mydate VALUE_DATE,
last_value(m.STK_EXCH IGNORE NULLS) OVER (ORDER BY n.mydate) STK_EXCH,
last_value(m.SECURITY IGNORE NULLS) OVER (ORDER BY n.mydate) SECURITY,
last_value(m.mkt_price IGNORE NULLS) OVER (ORDER BY n.mydate) MKT_PRICE
FROM
(SELECT VALUE_DATE, STK_EXCH, SECURITY, MKT_PRICE FROM MKT
) m,
(SELECT TRUNC(SYSDATE, 'MM')-1+LEVEL mydate FROM dual CONNECT BY LEVEL <= 30
)n
WHERE TRUNC(m.VALUE_DATE(+)) = TRUNC(n.mydate)
ORDER BY n.mydate;
या थोड़ा और विशिष्ट:नीचे उपयोग करें:
SELECT full_date,
NVL(stk_exch,last_value(stk_exch IGNORE NULLS)OVER(ORDER BY full_date))stk_exch,
NVL(security,last_value(security IGNORE NULLS)OVER(ORDER BY full_date))security,
NVL(mkt_price,last_value(mkt_price IGNORE NULLS)OVER(ORDER BY full_date))mkt_price
FROM
(SELECT TRUNC(m.vd,'MM')-1+LEVEL FULL_DATE
FROM
(SELECT MIN(VALUE_DATE) vd FROM mkt
WHERE TO_CHAR( value_date, 'MM/YYYY') = TO_CHAR(sysdate-12,'MM/YYYY') -- this line may vary to your requirement
) m
CONNECT BY LEVEL <= TO_CHAR(LAST_DAY(M.VD), 'DD')
)first_q,
( SELECT value_date, stk_exch, SECURITY, mkt_price FROM mkt
)r
WHERE first_q.full_date = TRUNC(r.value_date(+))
ORDER BY full_date;