Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
TSQL-使用智能模式(碰撞影响数据)减少记录数量_Sql_Sql Server_Sql Server 2008_Tsql_Azure - Fatal编程技术网

TSQL-使用智能模式(碰撞影响数据)减少记录数量

TSQL-使用智能模式(碰撞影响数据)减少记录数量,sql,sql-server,sql-server-2008,tsql,azure,Sql,Sql Server,Sql Server 2008,Tsql,Azure,我有一些数据,其中包含来自碰撞测试的测量数据。 当物体不移动时,测量值包含许多行相同的数据,当物体移动和晃动时,它可以记录相当大的波动 问题:我有数亿行这类数据,要将其用于报告(主要是绘图),我必须找到一种方法来简化一切,尤其是减少记录的数量。 有时我有20倍完全相同的值(=通道值) 数据示例如下所示: idMetaData;时间戳;SampleNumber;通道值 3.0,5036500;12073;0.4573468975 3.0,5037000;12074;0.4418814526 3.

我有一些数据,其中包含来自碰撞测试的测量数据。 当物体不移动时,测量值包含许多行相同的数据,当物体移动和晃动时,它可以记录相当大的波动

问题:我有数亿行这类数据,要将其用于报告(主要是绘图),我必须找到一种方法来简化一切,尤其是减少记录的数量。 有时我有20倍完全相同的值(=通道值)

数据示例如下所示:

idMetaData;时间戳;SampleNumber;通道值
3.0,5036500;12073;0.4573468975
3.0,5037000;12074;0.4418814526
3.0,5037500;12075;0.4109505628
3.0,5038000;12076;0.4109505628
3.0,5038500;12077;0.4264160077
3.0,5038999;12078;0.4573468975
3.0,5039499;12079;0.4573468975
3.0,5039999;12080;0.4109505628
3.0,5040500;12081;0.3336233382
3.0,5041000;12082;0.2408306686
3.0,5041500;12083;0.1789688889
3.0,5042000;12084;0.1789688889
3.0,5042500;12085;0.2253652237
3.0,5042999;12086;0.3026924483
3.0,5043499;12087;0.3645542280
3.0,5044000;12088;0.3954851178
3.0,5044500;12089;0.3645542280
3.0,5045000;12090;0.3026924483
3.0,5045500;12091;0.2253652237
3.0,5046000;12092;0.1635034440
3.0,5046499;12093;0.1325725541
3.0,5046999;12094;0.1480379991
3.0,5047500;12095;0.1789688889
3.0,5048000;12096;0.1944343338
3.0,5048500;12097;0.2098997788
3.0,5049000;12098;0.1944343338
3.0,5049500;12099;0.1635034440
3.0,5049999;12100;0.1171071092
3.0,5050499;12101;0.0861762194
3.0,5051000;12102;0.0707107744
3.0,5051500;12103;0.0707107744
3.0,5052000;12104;0.0861762194
3.0,5052500;12105;0.1171071092
3.0,5053000;12106;0.1635034440
idMetaData;时间戳;SampleNumber;通道值
50;0,8799999;19600;-0.7106432894
50;0,8800499;19601;-0.7484265845
50;0,8801000;19602;-0.7232377211
50;0,8801500;19603;-0.6098878356
50;0,8802000;19604;-0.6098878356
50;0,8802500;19605;-0.6476711307
50;0,8802999;19606;-0.7232377211
50;0,8803499;19607;-0.7988043114
50;0,8803999;19608;-0.8617764701
50;0,8804500;19609;-0.8491820384
50;0,8805000;19610;-0.8617764701
50;0,8805500;19611;-0.7988043114
50;0,8806000;19612;-0.8239931749
50;0,8806499;19613;-0.7988043114
50;0,8806999;19614;-0.7736154480
50;0,8807499;19615;-0.6602655625
50;0,8807999;19616;-0.5972934038
50;0,8808500;19617;-0.6602655625
50;0,8809000;19618;-0.7484265845
50;0,8809500;19619;-0.8365876066
50;0,8809999;19620;-0.7862098797
50;0,8810499;19621;-0.8113987432
50;0,8810999;19622;-0.7988043114
50;0,8811499;19623;-0.6980488576
50;0,8812000;19624;-0.7232377211
50;0,8812500;19625;-0.7484265845
50;0,8813000;19626;-0.7232377211
50;0,8813500;19627;-0.8239931749
50;0,8813999;19628;-0.8491820384
50;0,8814499;19629;-0.8617764701
50;0,8814999;19630;-0.8365876066
50;0,8815500;19631;-0.8365876066
50;0,8816000;19632;-0.7988043114
50;0,8816500;19633;-0.8113987432
50;0,8817000;19634;-0.8113987432
50;0,8817499;19635;-0.7736154480
50;0,8817999;19636;-0.7232377211
50;0,8818499;19637;-0.6728599942
50;0,8819000;19638;-0.7232377211
50;0,8819500;19639;-0.7610210163
50;0,8820000;19640;-0.7106432894
50;0,8820500;19641;-0.6602655625
50;0,8820999;19642;-0.6602655625
50;0,8821499;19643;-0.6854544259
50;0,8821999;19644;-0.7736154480
50;0,8822500;19645;-0.8113987432
50;0,8823000;19646;-0.8869653335
50;0,8823500;19647;-0.8743709018
50;0,8824000;19648;-0.7988043114
50;0,8824499;19649;-0.8491820384
50;0,8824999;19650;-0.8239931749
50;0,8825499;19651;-0.8239931749
50;0,8825999;19652;-0.7232377211
50;0,8826500;19653;-0.6854544259
50;0,8827000;19654;-0.6728599942
50;0,8827500;19655;-0.6854544259
50;0,8827999;19656;-0.7232377211
50;0,8828499;19657;-0.7232377211
50;0,8828999;19658;-0.6980488576
50;0,8829499;19659;-0.6980488576
50;0,8830000;19660;-0.7106432894
50;0,8830500;19661;-0.6854544259
50;0,8831000;19662;-0.7484265845
50;0,8831499;19663;-0.7484265845
50;0,8831999;19664;-0.7736154480
50;0,8832499;19665;-0.7610210163
50;0,8832999;19666;-0.7610210163
50;0,8833500;19667;-0.7988043114
50;0,8834000;19668;-0.8617764701
50;0,8834500;19669;-0.9121541970
50;0,8835000;19670;-0.8869653335
50;0,8835499;19671;-0.8743709018
50;0,8835999;19672;-0.9121541970
50;0,8836499;19673;-0.8491820384
50;0,8837000;19674;-0.7988043114
50;0,8837500;19675;-0.7736154480
50;0,8838000;19676;-0.7106432894
50;0,8838500;19677;-0.6980488576
50;0,8838999;19678;-0.7484265845
50;0,8839499;19679;-0.8491820384
50;0,8839999;19680;-0.8491820384
50;0,8840500;19681;-0.7610210163
50;0,8841000;19682;-0.7106432894
50;0,8841500;19683;-0.7232377211
50;0,8842000;19684;-0.7962098797
50;0,8842499;19685;-0.7358321528
50;0,8842999;19686;-0.7232377211
50;0,8843499;19687;-0.7484265845
50;0,8844000;19688;-0.6728599942
50;0,8844500;19689;-0.6854544259
50;0,8845000;19690;-0.7106432894
50;0,8845500;19691;-0.7232377211
50;0,8845999;19692;-0.7862098797
50;0,8846499;19693;-0.7862098797
idMetaData;时间戳;SampleNumber;通道值
15;0,3148000;8296;1.5081626404
15;0,3148500;8297;1.5081626404
15;0,3149000;8298;1.5727382554
15;0,3149500;8299;1.5081626404
15;0,3150000;8300;1.4920187367
15;0,3150500;8301;1.4435870254
15;0,3151000;8302;1.4274431217
15;0,3151500;8303;1.5243065442
15;0,3152000;8304;1.4920187367
15;0,3152500;8305;1.5081626404
15;0,3153000;8306;1.4920187367
15;0,3153500;8307;1.5565943516
15;0,3154000;8308;1.5081626404
15;0,3154500;8309;1.5404504479
15;0,3155000;8310;1.5081626404
15;0,3155500;8311;1.5727382554
15;0,3156000;8312;1.5404504479
15;0,3156500;8313;1.3951553142
15;0,3157000;8314;1.4758748329
15;0,3157500;8315;1.4435870254
15;0,3158000;8316;1.4920187367
15;0,3158500;8317;1.4920187367
15;0,3159000;8318;1.5081626404
15;0,3159500;8319;1.4597309292
15;0,3160000;8320;1.4274431217
15;0,3160500;8321;1.4274431217
15;0,3161000;8322;1.4597309292
15;0,3161500;8323;1.5565943516
15;0,3162000;8324;1.5888821591
15;0,3162500;8325;1.5565943516
15;0,3163000;8326;1.5243065442
15;0,3163500;8327;1.5404504479
15;0,3164000;8328;1.5404504479
declare @test table (idMetaData int, TimeStamp varchar(64), SampleNumber bigint, ChannelValue decimal(16,10))
insert into @test
values
(3,'0,5036500',12073,0.4573468975),
(3,'0,5037000',12074,0.4418814526),
(3,'0,5037500',12075,0.4109505628),
(3,'0,5038000',12076,0.4109505628),
(3,'0,5038500',12077,0.4264160077),
(3,'0,5038999',12078,0.4573468975),
(3,'0,5039499',12079,0.4573468975),
(3,'0,5039999',12080,0.4109505628),
(3,'0,5040500',12081,0.3336233382),
(3,'0,5041000',12082,0.2408306686),
(3,'0,5041500',12083,0.1789688889),
(3,'0,5042000',12084,0.1789688889)

--set the minimum variation you want to keep. Anything greate than this will be removed
declare @variation decimal(16,10) = 0.0000000010

--apply an order with row_number()
;with cte as(
    select 
        idMetaData
        ,TimeStamp
        ,SampleNumber
        ,ChannelValue
        ,row_number() over (partition by idMetadata order by SampleNumber) as RN
    from @test),

--self join to itself adding the next row as additional columns
cte2 as(
select
    c.*
    ,c2.TimeStamp as C2TimeStamp
    ,c2.SampleNumber as C2SampleNumber
    ,c2.ChannelValue as C2ChannelValue
from cte c
left join cte c2 on c2.rn = c.rn + 1)


--only return the results where the variation is met. Change the variation to see this in action
select 
    idMetaData
    ,TimeStamp
    ,SampleNumber
    ,ChannelValue
from 
    cte2
where
    ChannelValue - C2ChannelValue > @variation or C2ChannelValue is null
;with cteBase as (Select GroupBy = [idMetaData]
                        ,Item    = Row_Number() over (Partition By [idMetaData] Order By SampleNumber) / 10
                        ,RowNr   = Row_Number() over (Partition By [idMetaData] Order By SampleNumber) 
                        ,Measure = ChannelValue
                        ,TimeStamp
                        ,SampleNumber
                   From  @YourTable
                 ),
       cteMean as (Select GroupBy,Item,Mean=Avg(Measure),Rows=Count(*),MinRow=min(RowNr),MaxRow=max(RowNr) From cteBase Group By GroupBy,Item),
       cteMedn as (Select GroupBy,Item,MedRow1=ceiling(Rows/2.0),MedRow2=ceiling((Rows+1)/2.0) From cteMean),
       cteMode as (Select GroupBy,Item,Mode=Measure,ModeHits=count(*),ModeRowNr=Row_Number() over (Partition By GroupBy,Item Order By Count(*) Desc) From cteBase Group By GroupBy,Item,Measure)

Select idMetaData    = A.GroupBy
      ,Bin           = A.Item+1       
      ,TimeStamp1    = min(TimeStamp)
      ,TimeStamp2    = max(TimeStamp)
      ,SampleNumber1 = min(SampleNumber)
      ,SampleNumber2 = max(SampleNumber)
      ,Records       = count(*)
      ,StartValue    = sum(case when RowNr=B.MinRow then Measure end)
      ,EndValue      = sum(case when RowNr=B.MaxRow then Measure end)
      ,UniqueVals    = count(Distinct A.Measure)
      ,MinVal        = min(A.Measure)
      ,MaxVal        = max(A.Measure)
      ,Mean          = max(B.Mean)
      ,Median        = isnull(Avg(IIF(RowNr between MedRow1 and MedRow2,Measure,null)),avg(A.Measure)) 
      ,ModeR1        = isnull(max(IIf(ModeHits>1,D.Mode,null)),min(A.Measure))
      ,ModeR2        = isnull(max(IIf(ModeHits>1,D.Mode,null)),max(A.Measure))
      ,StdDev        = Stdev(A.Measure)
 From  cteBase A
 Join  cteMean B on (A.GroupBy=B.GroupBy and A.Item=B.Item)
 Join  cteMedn C on (A.GroupBy=C.GroupBy and A.Item=C.Item)
 Join  cteMode D on (A.GroupBy=D.GroupBy and A.Item=D.Item and ModeRowNr=1)
 Group By A.GroupBy,A.Item
 Order By A.GroupBy,A.Item