mysql如何实现两行记录相减

需求是需要统计某只股票的某个时间段的区间涨幅,表结构如下:

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
);