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

समान मान वाले 3 या अधिक लगातार रिकॉर्ड वाले रिकॉर्ड खोजें

आप "नकद" लेनदेन की गणना करने के लिए एक चाल का उपयोग कर सकते हैं। यह ट्रिक पंक्ति संख्याओं का अंतर है और यह बहुत उपयोगी है:

select t.*
from (select t.*, count(*) over (partition by grp, customerid, transtype) as cnt
      from (select t.*,
                   (row_number() over (partition by customerid order by date) -
                    row_number() over (partition by customerid, transtype order by date)
                   ) as grp
            from t
           ) t
      where transtype = 'cash'
     ) t
where cnt >= 3;

यह ग्राहकों और प्रारंभ तिथि लौटाता है। यदि आप वास्तविक लेन-देन वापस करना चाहते हैं, तो आप विंडो फ़ंक्शंस के अतिरिक्त स्तर का उपयोग कर सकते हैं:

select customerid, min(date) as start_date, sum(value) as sumvalue
from (select t.*,
             (row_number() over (partition by customerid order by date) -
              row_number() over (partition by customerid, transtype order by date)
             ) as grp
      from t
     ) t
where transtype = 'cash'
group by grp, transtype, customerid
having count(*) >= 3;


  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 सर्वर में Excel फ़ाइल कैसे आयात करें?

  2. SQL सर्वर दिनांक पर विधियों को कॉल नहीं कर सकता

  3. 'COLLATE SQL_Latin1_General_CP1_CI_AS' क्या करता है?

  4. क्या टाइमस्टैम्प कॉलम अद्वितीय है?

  5. एसक्यूएल सर्वर में सेलेक्ट स्टेटमेंट में व्हेयर क्लॉज का उपयोग कैसे करें - एसक्यूएल सर्वर / टीएसक्यूएल ट्यूटोरियल पार्ट 109