Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

अंतराल कैसे भरें?

आपके पास 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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. सम्मिलित/हटाए गए ट्रिगर टेबल पर धीरे-धीरे शामिल हों

  2. वेब से निष्पादित होने पर क्वेरी का समय समाप्त हो जाता है, लेकिन SSMS से निष्पादित होने पर सुपर-फास्ट

  3. SQL सर्वर प्री-लॉगिन हैंडशेक पावती त्रुटि

  4. SQL सर्वर में तालिका मौजूद है या नहीं, यह जांचने के 6 तरीके (T-SQL उदाहरण)

  5. ऑर्डर बाय का उपयोग करते समय COALESCE के साथ अजीब TSQL व्यवहार