日期:2014-05-18  浏览次数:20529 次

取样统计的SQL语句怎么写?
关于抽样统计的问题:
  一个表里面有三个字段:测试项TestItem、测试时间TestTime和测试值TestValue
  现在要做抽样统计:在存储过程中按照给定的时间段@starttime和@stoptime,将这个时间段分成25个等长时间段, 然后在25个时间段中每个时间段内抽取5条记录, 再对每个时间段中的5条记录取他们的测试值的最大与最小的差值, 最后对这25个差值取平均值。
  请问这个抽样统计用SQL怎么写,因为具体到实践中还需要统计一个类似的数据,所以考虑要用表变量,或者临时表,不知道对不对?

------解决方案--------------------
你给点测试数据吧
------解决方案--------------------
1、25个等长的时间段,这个是按什么计算的,小时 分钟 秒数 ?
2、每个时间段抽取5条记录,抽取方式是怎样的?随机?
------解决方案--------------------
楼主最好是结合测试表的结构 数据 和 统计结果来说明,会更直观。
------解决方案--------------------
你这个时间段是按照什么单位来算的?

分钟还是小时还是????

------解决方案--------------------
SQL code
declare @i int,@a datetime,@b datetime
set @a='2012-03-28 09:00:00'
set @b='2012-03-28 09:50:00'
set @i=datediff(mi,@a,@b)*1.0/25
select @i
select dateadd(mi,number*@i,@a),dateadd(mi,(number+1)*@i,@a) from master..spt_values 
where type='p'
and number<=25

------解决方案--------------------
关键是你不知道怎么等分吧,参考

SQL code
declare @a datetime = '2012-03-01'
declare @b datetime = '2012-03-02 01:00'
declare @minute int = datediff(minute,@a,@b)/25;
with cte as
(
    select group_id=datediff(minute,dt,@a)/@minute, * from tb where dt between @a and @b
)
select * into #tmp from cte t where [key] in (select top 5 [key] from tb where group_id=t.group_id order by newid())

select max(val)-min(val), avg(max(val)-min(val))over() from #tmp group by group_id