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

时间:2015-01-27 13:43:33

标签: 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天:105 第6天:112 第7天:110

差异是110(第7天)减去100(第1天)= 10.不是最大值(val)= 120减去最小值(val)= 98 = 22

谢谢!

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

加入一个子查询,返回第一个和最后一个日期并使用它们加入,并使用一些简单的算术来计算使用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)

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