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

SQL 2008 का उपयोग करके विभिन्न अभिलेखों के बीच आंशिक योग

यह एक अंतराल और द्वीप समस्या है, जहां प्रत्येक द्वीप एक "इन" रिकॉर्ड के साथ समाप्त होता है, और आप प्रत्येक द्वीप में मानों का योग करना चाहते हैं।

यहां एक दृष्टिकोण है जो समूह को परिभाषित करने के लिए निम्नलिखित "इन" की संख्या का उपयोग करता है, और फिर प्रत्येक समूह पर एक विंडो योग का उपयोग करता है।

select timestamp,
    case when val = 'out' 
        then val
        else sum(val) over(partition by grp order by timestamp)
    end as val,
    typerow
from (
    select t.*,
        sum(case when typerow = 'in' then 1 else 0 end) over(order by timestamp desc) grp
    from @table t
) t
order by timestamp

डीबी फिडल पर डेमो :

timestamp               | val | typerow
:---------------------- | --: | :------
2018-06-03 13:30:00.000 |   6 | out    
2018-06-03 14:10:00.000 |   8 | out    
2018-06-03 14:30:00.000 |  17 | in     
2018-06-03 15:00:00.000 |   9 | out    
2018-06-03 15:30:00.000 |   4 | out    
2018-06-03 16:00:00.000 |   2 | out    
2018-06-03 17:05:00.000 |  23 | in     
2018-06-03 17:30:00.000 |   0 | out    
2018-06-03 18:15:00.000 |   7 | out    
2018-06-03 18:30:00.000 |   8 | in     
2018-06-03 19:00:00.000 |   5 | out    



  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 कैसे निष्पादित कर सकता हूं?

  2. मामला जब खंड द्वारा आदेश के लिए बयान

  3. विजुअल स्टूडियो के माध्यम से बनाए गए मेरे डेटाबेस तक पहुंच प्राप्त नहीं कर सकता?

  4. वर्चर फ़ील्ड SQL Server 2008 से एकल वर्ण निकालें

  5. आपके SQL सर्वर जटिलता को कम करने के लिए युक्तियाँ