Mysql 计算第一个和最后一个结果之间的差异
我有一张有两列的桌子。第一个val是整数,第二个是时间戳ts 现在我想计算给定时间跨度的第一个值和最后一个值之间的差值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天:
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)