这是处理前的表格:

处理后的表格:

文字解释一下:首先表格是按照时间列排序好了的,如果相邻行状态列值相同,那么这些行合并为一行,时间列取各行最小值,值列取各行值的和。
一定要是相邻行的状态值相同才合并!
------解决方案--------------------
select min(B.时间),A.状态,sum(B.值)
from (SELECT * FROM (SELECT T.*,lead(状态,1,' ')over(order by 时间) AS N FROM T) WHERE 状态<>N) a,T b
WHERE A.状态=b.状态 AND B.时间<=A.时间
and not exists(select 1 from T WHERE 状态<>A.状态 AND 时间>B.时间 AND 时间<A.时间)
GROUP BY A.时间,A.状态
ORDER BY A.时间
建表测试了下,测试通过,结果如下
2014-1-1 1 2
2014-1-2 2 4
2014-1-4 3 6
2014-1-7 2 2
2014-1-8 1 2