我有一个有两列的表。第一个(“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
谢谢!
答案 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(已简化演示模式以隔离解决方案的本质)。