需求是需要统计某只股票的某个时间段的区间涨幅,表结构如下:
CREATE TABLE `money` (
`id` int(11) NOT NULL,
`code` varchar(10) COLLATE utf8mb4_unicode_ci NOT NULL,
`name` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL,
`pchange` double NOT NULL,
`inflow` double NOT NULL,
`amount` bigint(11) NOT NULL,
`price` double NOT NULL,
`high` double NOT NULL,
`low` double NOT NULL,
`open` double NOT NULL COMMENT '开盘',
`yclose` double NOT NULL COMMENT '收盘',
`amplitude` double NOT NULL COMMENT '振幅',
`dchratio` double NOT NULL COMMENT '换手率',
`datetime` int(11) NOT NULL,
`type` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
我的思路是先找出时间段的数据(order by datetime),然后通过(最后一条记录的price - 首条记录的price)/ 首条记录的price *100
但不知道怎么实现,希望有人能提供 一个方法。
当然,有更好的思路就更好了,我也担心性能有问题
定义3个变量:time1,time2,result 。
可以封装成一个方法或存储过程,2个时间点为参数
declare @time1 datetime,@time2 datetime,@result decimal(8,3)
select @result = 100 * ((select price from money where datetime =@time2)-(select price from money where datetime = @time1))/(select price from money where datetime=@time1)
这还需要写存储过程嘛...你set三个变量就行了,第一个变量是开始时间,第二个结束时间,第三个就是哪支股票。
set @start_time = date'开始时间';
set @end_time = date'结束时间';
set @flag = '股票的标志';
select (sum(a.end_price )- sum(a.start_price)) / sum(a.end_price) * 100
from
(select case when datetime = @start_time then price else 0 end start_price,
case when datetime = @end_time then price else 0 end end_price
from table_name where 股票的标志字段 = @flag) a;
代码里的datetime变成时间类型就OK了,我看你题目里给的好像是整形。
select (b.price-a.price)/a.price*100
from (
(select price from money
where datetime=(select min(date_time) from money)) a,
(select price from money
where datetime=(select max(date_time) from money)) b
);