आपके पास 2 समस्याएं हैं जिन्हें आप हल करने का प्रयास कर रहे हैं। पहला मुद्दा यह है कि अंतराल को कैसे भरा जाए। दूसरा मुद्दा उन लापता रिकॉर्ड के लिए गणना फ़ील्ड को पॉप्युलेट कर रहा है।
समस्या 1:इसे Dates Lookup table
. का उपयोग करके हल किया जा सकता है या एक recursive common table expression
creating बनाकर . मैं इसके लिए दिनांक लुकअप तालिका बनाने की अनुशंसा करता हूं यदि यह एक विकल्प है। यदि आप ऐसी तालिका नहीं बना सकते हैं, तो आपको कुछ इस तरह की आवश्यकता होगी।
WITH CTE AS (
SELECT MAX(dt) maxdate, MIN(dt) mindate
FROM yourtable
),
RecursiveCTE AS (
SELECT mindate dtfield
FROM CTE
UNION ALL
SELECT DATEADD(day, 1, dtfield)
FROM RecursiveCTE R
JOIN CTE T
ON R.dtfield < T.maxdate
)
इससे आपको MIN
. से शुरू होने वाली तारीखों की एक सूची बनानी चाहिए आपकी तालिका में दिनांक और MAX
. में समाप्त होने वाला दिनांक ।
समस्या 2:यहां एक correlated subquery
है आपकी मूल तालिका से अंतिम सीएनटी प्राप्त करने के लिए काम आएगा (जितना मैं आम तौर पर उनसे दूर रहता हूं):
SELECT r.dtfield,
(SELECT TOP 1 cnt
FROM yourtable
WHERE dt <= r.dtfield
ORDER BY dt DESC) cnt
FROM RecursiveCTE r