使用SQL行的间隔数据进行系列化

时间:2013-08-20 08:19:17

标签: sql sql-server-2012

很抱歉,如果我用错误的词语来解释我的问题。

我有一张桌子,可以在织物质量控制过程中保持织物上的错误。我有这样的数据。

result from table

(在第一次滚动中有一个错误,持续8米而没有任何中断。但在第二次滚动中,即使错误相同,但中断也不是连续错误)

我怎样才能在下面得到这样的结果?

enter image description here

2 个答案:

答案 0 :(得分:1)

这被称为“群岛”问题。一种解决方案是使用row_number()来形成ErrorMeter以与1不同的方式更改的组:

select  Fabric
,       Roll
,       min(ErrorMeter) as ErrorBeginMeter
,       max(ErrorMeter) as ErrorEndMeter
,       min(ErrorCode) as ErrorCode
from    (
        select  row_number() over (partition by Fabric, Roll 
                    order by ErrorMeter) - cast(ErrorMeter as int) as grp
        ,       *
        from    FabricErrors
        ) as SubQueryAlias
group by
        Fabric
,       Roll
,       grp

Live example at SQL Fiddle.

答案 1 :(得分:0)

你会想要使用好的'GROUP BY,以及MIN和MAX。

SELECT *,
    MIN(ErrorMeter) ErrorBeginMeter,
    MAX(ErrorMeter) ErrorEndMeter
FROM fabric_quality
GROUP BY Fabric,Roll

编辑:我刚刚意识到您的结果集只聚合了带有连续错误计的行,这需要more complicated solution