sql >> Database teknologi >  >> RDS >> Sqlserver

Delsum mellem forskellige poster ved hjælp af SQL 2008

Dette er et hul-og-ø-problem, hvor hver ø ender med en "in"-record, og du vil summere værdierne på hver ø.

Her er en tilgang, der bruger antallet af følgende "in" til at definere gruppen, og derefter en vinduessum over hver gruppe.

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

Demo på DB Fiddle :

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. Trådsikkert PQconn-objekt

  2. PIVOT dynamisk, returnerede resultater fra JOIN af to tabeller

  3. Hvordan ændres sammenstilling af alle rækker fra latin1_swedish_ci til utf8_unicode_ci?

  4. Distribueret transaktion på linket server mellem sql server og mysql