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

दिनांक डुप्लीकेट के साथ एक समय सीमा के भीतर अधिकतम

अगर मैं सही ढंग से समझ गया, तो आप अपनी समयावधि में एक विशिष्ट स्थिति के लिए अलग प्रविष्टि की गणना करना चाहते हैं ... यदि ऐसा है, तो आपको DISTINCT का उपयोग करना चाहिए आपके count() . में क्लॉज गिनती (*) से गिनती (अलग एंट्री_आईडी) में बदलना

with c (Status_Id, Entry_Id, Start_Date) AS (
  select Status_Id, Entry_Id, Start_Date from tbl where
  (End_Date BETWEEN '19000101' AND '21000101')
  AND ((Start_Date BETWEEN '19000101' AND '21000101')
  OR End_Date <= '21000101'))
select Status_Id, count(distinct Entry_Id) as cnt from 
 (select Entry_Id, max(start_date) as start_date from c
  group by Entry_Id) d inner join
c on c.Entry_Id = d.Entry_Id
and c.start_date = d.start_date
GROUP BY Status_Id WITH ROLLUP

संपादित करें

जब तक आपको परवाह नहीं है कि दी गई प्रविष्टि के लिए कौन सी स्थिति वापस आती है, मुझे लगता है कि आप पहली स्थिति को वापस करने के लिए आंतरिक क्वेरी को संशोधित कर सकते हैं और स्थिति में भी शामिल हो सकते हैं

with c (Status_Id, Entry_Id, Start_Date) AS (
  select Status_Id, Entry_Id, Start_Date from tbl where
  (End_Date BETWEEN '19000101' AND '21000101')
  AND ((Start_Date BETWEEN '19000101' AND '21000101')
  OR End_Date <= '21000101'))
select c.Status_Id, count(c.Entry_Id) as cnt from 
 (select Entry_Id, Start_Date, (select top 1 Status_id from c where Entry_Id = CC.Entry_Id and Start_Date = CC.Start_Date) as Status_Id
  from (select Entry_Id, max(start_date) as start_date from c
  group by Entry_Id) as CC) d inner join
c on c.Entry_Id = d.Entry_Id
and c.start_date = d.start_date
and c.status_id = d.status_id
GROUP BY c.Status_Id

परिणाम

Status_id Count
 489       2
 492       1
 495       1


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर (T-SQL) में उन्नत सर्वर कॉन्फ़िगरेशन विकल्प दिखाएँ

  2. SQL सर्वर प्रबंधन स्टूडियो (SSMS) के साथ डेटाबेस डिज़ाइन अवधारणाएँ भाग 1

  3. टी-एसक्यूएल डालने से पहले मूल्य को कैसे संशोधित करें

  4. वेब-ऐप में रिपोर्टिंग सर्विसेज 2005 द्वारा कॉल किए जाने पर दूसरी टी-एसक्यूएल क्वेरी पहले की तुलना में बहुत तेज क्यों चलती है

  5. INSERTED में नहीं मान डालने के लिए OUTPUT क्लॉज का उपयोग करना