首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

SQL 2008 准时间段划分(每十分钟)统计良率

2013-10-11 
SQL 2008 按时间段划分(每十分钟)统计良率各位大侠,帮忙看看怎么使用存储过程实现下面的统计,数据量很大。

SQL 2008 按时间段划分(每十分钟)统计良率
SQL 2008 准时间段划分(每十分钟)统计良率
各位大侠,帮忙看看怎么使用存储过程实现下面的统计,数据量很大。

时间段产量合格数量良率
2013-07-09 16:2050300.6
2013-07-09 16:3040350.86
2013-07-09 16:4046360.78
2013-07-09 16:5042370.88
2013-07-09 17:0041380.93
2013-07-09 17:1060420.7
2013-07-09 17:2055330.6
2013-07-09 17:3052340.65
2013-07-09 17:4053460.87

sql?2008?每十分钟统计良率
[解决办法]


if object_id('tb') is not null drop table tb
go
create table tb(BarCode varchar(30),TestTime datetime,Result varchar(10))
insert into tb(BarCode,TestTime,Result)
select 'DYD3282AT93FD0785','2013-07-09 16:20','PASS' union all
select 'DYD3283AK6NFD0782','2013-07-09 16:21','PASS' union all
select 'DYD3283AK6TFD078X','2013-07-09 16:22','PASS' union all
select 'DYD3283AK6SFD078Y','2013-07-09 16:23','PASS' union all
select 'DYD3283AK6MFD0783','2013-07-09 16:23','PASS' union all
select 'DYD3283AK6QFD0780','2013-07-09 16:24','PASS' union all
select 'DYD3283AK6EFD078A','2013-07-09 16:24','PASS' union all
select 'DYD3283AK6FFD0789','2013-07-09 16:25','PASS' union all
select 'DYD3283AK6JFD0786','2013-07-09 16:26','PASS' union all
select 'DYD3283AK6KFD0785','2013-07-09 16:26','PASS' union all
select 'DYD3282AT91FD0787','2013-07-09 16:28','PASS' union all
select 'DYD3283BKEWFD0781','2013-07-09 16:28','PASS' union all
select 'DYD3282BTBSFD0787','2013-07-09 16:29','PASS' union all
select 'DYD3283AL1MFD078H','2013-07-09 16:30','PASS' union all
select 'DYD3282AU3AFD078F','2013-07-09 16:31','FAIL' union all
select 'DYD3283BK4HFD078A','2013-07-09 16:31','PASS' union all
select 'DYD3272AU8EFD078Z','2013-07-16 14:48','PASS' union all
select 'DYD3272AT8GFD078Y','2013-07-16 14:48','FAIL' union all
select 'DYD3272AT24FD078U','2013-07-16 14:49','PASS' union all
select 'DYD3272AT7RFD078S','2013-07-16 14:49','FAIL' union all
select 'DYD3272AT1XFD0784','2013-07-16 14:51','FAIL' union all
select 'DYD3272AT4MFD0785','2013-07-16 14:51','FAIL' union all
select 'DYD3272AT4QFD0782','2013-07-16 14:52','FAIL' union all
select 'DYD3272AT89FD0785','2013-07-16 15:14','FAIL'
go

--测试语句
;with cte as(
select [时间段]=CONVERT(char(15),TestTime,120)+'0' 
,[产量]=COUNT(*)
,[合格数量]=SUM(case when result='PASS' then 1 else 0 end)
from tb with(nolock)
group by CONVERT(char(15),TestTime,120)+'0'
)select *,CONVERT(numeric(5,2),[合格数量]*1.0/[产量]) as [良率] from cte
go

drop table tb

/**
时间段              产量          合格数量        良率
---------------- ----------- ----------- ---------------------------------------
2013-07-09 16:20 13          13          1.00
2013-07-09 16:30 3           2           0.67
2013-07-16 14:40 4           2           0.50
2013-07-16 14:50 3           0           0.00
2013-07-16 15:10 1           0           0.00

(5 行受影响)
*/

[解决办法]
create table #table(a varchar(10),b varchar(10),c varchar(10) )
insert into #table
select * from (
select 1 as 'a',1 as 'b',1 as 'c'
union
select 1 as 'a',2 as 'b',2 as 'c'
union
select 2 as 'a',2 as 'b',2 as 'c'
union
select 2 as 'a',2 as 'b',1 as 'c'
) as w

select * from #table 

declare @i int 
set @i=1
while @i<5
begin

declare @s datetime 
set @s=DATEADD(ss,3,getdate())--当前时间加三秒执行一次 
waitfor time @s--定时执行函数


update #table set c='a'+convert(varchar(10),@i)
select  * from #table
set @i=@i+1
end

定时执行。。我这里用的是while 到时候你可以用存储过程执行完后自己调用自己 

热点排行