27,579
社区成员
发帖
与我相关
我的任务
分享
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
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
CREATE TABLE [dbo].[Test](
[TestID] [uniqueidentifier] NOT NULL,
[ProductSN] [nvarchar](50) NOT NULL,
[TestTime] [datetime] NOT NULL,
[ProductTypeID] [nvarchar](50) NULL,
[UserID] [nvarchar](20) NULL,
[ENAID] [nvarchar](50) NULL,
[IsPass] [nvarchar](10) NULL,
[IsSwitch] [nvarchar](10) NULL)
CREATE TABLE [dbo].[TestItem](
[TestItemID] [uniqueidentifier] NOT NULL,
[TestItemName] [nvarchar](50) NULL,
[ProductSN] [nvarchar](50) NULL,
[TestTime] [datetime] NULL,
[TestTypeID] [int] NULL,
[StartF] [decimal](18, 4) NULL,
[StopF] [decimal](18, 4) NULL,
[Max] [decimal](18, 4) NULL,
[Min] [decimal](18, 4) NULL,
[HighSpec] [decimal](18, 4) NULL,
[LowSpec] [decimal](18, 4) NULL,
[IsPass] [nvarchar](10) NULL,
[TestTypeName] [nvarchar](50) NULL)
IF OBJECT_ID ('TestwithHourAxis', 'V') IS NOT NULL
DROP VIEW TestwithHourAxis ;
GO
Create view TestwithHourAxis
as
select ProductTypeID,ti.ProductSN,ti.TestTime,TestItemName,
TestTypeID,StartF,StopF,Max,Min,HighSpec,LowSpec,ti.IsPass,TestTypeName
from TestItem ti inner join Test t
on ti.ProductSN=t.ProductSN and ti.TestTime=t.TestTime
IF OBJECT_ID ( 'TestItem_SPCPID_DT', 'P' ) IS NOT NULL
DROP PROCEDURE TestItem_SPCPID_DT;
GO
CREATE PROCEDURE TestItem_SPCPID_DT
@ProductTypeID nvarchar(50) =null,
@TestItemName nvarchar(50),
@starttime datetime,
@stoptime datetime
AS
begin
declare @i int
declare @timediff int
--declare @pretime datetime
--declare @posttime datetime
declare @HighSpec decimal(18,4)
declare @LowSpec decimal(18,4)
declare @avgval decimal(18,4)
declare @rangeval decimal(18,4)
declare @TableVariable TABLE (avgval decimal(18,4),rangeval decimal(18,4))
set @i=0
set @timediff=datediff(mi,@starttime,@stoptime)/25
set @HighSpec=(
select top 1 HighSpec
from TestwithHourAxis
where ProductTypeID=@ProductTypeID and TestItemName=@TestItemName)
set @LowSpec=(
select top 1 LowSpec
from TestwithHourAxis
where ProductTypeID=@ProductTypeID and TestItemName=@TestItemName)
while @i<25
begin
--set @pretime=dateadd(mi,@i*@timediff,@starttime)
--set @posttime=dateadd(mi,(@i+1)*@timediff,@starttime)
select @avgval=avg(Max) from
(select top 5 * from TestwithHourAxis
where TestTime between dateadd(mi,@i*@timediff,@starttime) and dateadd(mi,(@i+1)*@timediff,@starttime)
and ProductTypeID=@ProductTypeID and TestItemName=@TestItemName
order by newid())
select @rangeval=(max(Max)-min(Max)) from
(select top 5 * from TestwithHourAxis
where TestTime between dateadd(mi,@i*@timediff,@starttime) and dateadd(mi,(@i+1)*@timediff,@starttime)
and ProductTypeID=@ProductTypeID and TestItemName=@TestItemName
order by newid())
insert @TableVariable values(@avgval,@rangeval)
set @i=@i+1
end
select avg(avgval),avg(rangeval),
(case when avg(avgval) is null
then null
else case when @HighSpec is null
then avg(avgval)+avg(rangeval)*0.58
else case when @HighSpec<avg(avgval)+avg(rangeval)*0.58
then @HighSpec
else avg(avgval)+avg(rangeval)*0.58
end
end
end) as UCLx,
(case when avg(avgval) is null
then null
else case when @LowSpec is null
then avg(avgval)-avg(rangeval)*0.58
else case when @LowSpec>avg(avgval)-avg(rangeval)*0.58
then @LowSpec
else avg(avgval)-avg(rangeval)*0.58
end
end
end) as LCLx,
(case when @LowSpec is null
then avg(rangeval)*2.11
else case when @HighSpec-@LowSpec<avg(rangeval)*2.11
then @HighSpec-@LowSpec
else avg(rangeval)*2.11
end
end) as UCL,
avg(rangeval)*0 as LCL
from @TableVariable
end
go
exec TestItem_SPCPID_DT
@ProductTypeID='AGX18'
@TestItmeName ='Gain.(B-1AOut1)',
@starttime ='2012-03-22 14:51:00.000',
@stoptime ='2012-03-27 14:51:00.000'