sql >> Database >  >> RDS >> Sqlserver

Gedeeltelijke som tussen verschillende records met SQL 2008

Dit is een gaps-and-islands-probleem, waarbij elk eiland eindigt met een "in"-record en je de waarden in elk eiland wilt optellen.

Hier is een benadering die het aantal volgende "in" gebruikt om de groep te definiëren, en vervolgens een venstersom over elke groep.

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 op 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. Verwijder ALLE of bepaalde niet-afdrukbare tekens uit de kolom in mysql

  2. SQL verkrijgen gebruikers die een bericht hebben ontvangen of verzenden (UPDATE)

  3. Relaties van modellen (Laravel 5.2)

  4. Sporen 3.1. Heroku PGError:operator bestaat niet:karakter variërend =geheel getal