Mysql 计算第一个和最后一个结果之间的差异

Mysql 计算第一个和最后一个结果之间的差异,mysql,sql,Mysql,Sql,我有一张有两列的桌子。第一个val是整数,第二个是时间戳ts 现在我想计算给定时间跨度的第一个值和最后一个值之间的差值 SELECT MAX(val) - MIN(val) AS difference WHERE ts >= '2015-01-01 00:00:00' AND ts <= '2015-01-07 23:59:59' 这是不够的,因为随着时间的推移,这些值可能会超过/削弱第一个和最后一个值 例如: 第1天:100 第2天:120 第3天:110 第4天:98 第5天:

我有一张有两列的桌子。第一个val是整数,第二个是时间戳ts

现在我想计算给定时间跨度的第一个值和最后一个值之间的差值

SELECT MAX(val) - MIN(val) AS difference WHERE ts >= '2015-01-01 00:00:00' AND ts <= '2015-01-07 23:59:59'
这是不够的,因为随着时间的推移,这些值可能会超过/削弱第一个和最后一个值

例如: 第1天:100 第2天:120 第3天:110 第4天:98 第5天:105 第6天:112 第7天:110

差值为110天7减去100天1=10。不是Maxval=120减去Minval=98=22


谢谢

一种方法是使用两个子查询,一个获取第一个值,另一个获取最后一个值:

SELECT ((SELECT val
         FROM table t
         WHERE ts >= '2015-01-01 00:00:00' AND ts <= '2015-01-07 23:59:59'
         ORDER BY val DESC
         LIMIT 1
        ) - 
        (SELECT val
         FROM table t
         WHERE ts >= '2015-01-01 00:00:00' AND ts <= '2015-01-07 23:59:59'
         ORDER BY val ASC
         LIMIT 1
        )
       ) as difference

连接到返回第一个和最后一个日期的子查询,并使用这些日期进行连接,然后使用一些简单的算术运算,使用sum计算差值:

请参阅已简化的演示模式,以隔离解决方案的本质

select sum(val * case ts when ts1 then -1 else 1 end) diff
from data
join (select min(ts) ts1, max(ts) ts2
      from data
      where ts between ? and ?) x
on ts in (ts1, ts2)