Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Частична сума между различни записи с помощта на SQL 2008

Това е проблем с празнини и острови, при който всеки остров завършва със запис "in" и искате да сумирате стойностите във всеки остров.

Ето един подход, който използва броя на следващите "входове", за да дефинира групата, и след това сума на прозореца за всяка група.

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

Демо на 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да добавите Failover Partner към низ за връзка във VB.NET

  2. Как да съпоставите множество дялове в една файлова група в SQL Server (T-SQL)

  3. Обработка на грешки с курсор в SQL

  4. Възникна грешка на ниво транспорт при получаване на резултати от сървъра

  5. Връщане на списък с тригери в SQL Server