我需要求得一个值,后一个值致少比前一个值大28%就是0.28,符合条件的就找出来,现在主要的问题是算法效率太慢,每天要产生几十万条数据,有没有高效一点的算法,计算出来?
下面是表结构和表的值。
if exists (select * from sysobjects where id = OBJECT_ID('[GP_GPDMBCJL]') and OBJECTPROPERTY(id, 'IsUserTable') = 1)
DROP TABLE [GP_GPDMBCJL]
CREATE TABLE [GP_GPDMBCJL] (
[序号] [char] (3) NOT NULL,
[股票代码] [char] (8) NULL,
[涨幅] [decimal] (18,2) NULL,
[量化值] [decimal] (18,2) NULL)
ALTER TABLE [GP_GPDMBCJL] WITH NOCHECK ADD CONSTRAINT [PK_GP_GPDMBCJL] PRIMARY KEY NONCLUSTERED ( [序号] )
INSERT [GP_GPDMBCJL] ([序号],[股票代码],[涨幅],[量化值]) VALUES ( N'001',N'sz000686',1.39,0.23)
INSERT [GP_GPDMBCJL] ([序号],[股票代码],[涨幅],[量化值]) VALUES ( N'002',N'sz000686',1.53,1.02)
INSERT [GP_GPDMBCJL] ([序号],[股票代码],[涨幅],[量化值]) VALUES ( N'003',N'sz000686',2.78,2.18)
INSERT [GP_GPDMBCJL] ([序号],[股票代码],[涨幅],[量化值]) VALUES ( N'004',N'sz000686',2.36,3.25)
INSERT [GP_GPDMBCJL] ([序号],[股票代码],[涨幅],[量化值]) VALUES ( N'005',N'sz000686',2.08,3.93)
下面是我们想实现的简单算法,但这样效率太低,主要问题是有没有更高效的算法计算?
Declare @k int
Declare @V_001 decimal(18,2)
Declare @V_002 decimal(18,2)
Declare @V_003 decimal(18,2)
Declare @V_004 decimal(18,2)
Declare @V_005 decimal(18,2)
Declare @V_006 decimal(18,2)
Declare @V_007 decimal(18,2)
Declare @V_008 decimal(18,2)
Select @V_001=涨幅 from GP_GPDMBCJL where 序号='001' and 股票代码='sz000686'
Select @V_002=涨幅 from GP_GPDMBCJL where 序号='002' and 股票代码='sz000686'
Select @V_003=涨幅 from GP_GPDMBCJL where 序号='003' and 股票代码='sz000686'
set @k=0; //如何在003时,找出003涨幅是不是比002涨幅大0.28,002涨幅是不是比001的涨幅大0.28
set @V_004=@V_001*1.28
set @V_005=@V_002*1.28
set @V_006=@V_003*1.28
if(@V_004<@V_002)
begin
if(@V_005<@V_003)
begin
set @k=1;
end;
end;
print @k;