我正在尝试构建一个查询,按时间间隔(即 30 分钟)对我的数据进行分组,然后计算每组中第一行和最后一行之间的差异。
select (max(v) - min(v)) as x, from_unixtime(FLOOR(UNIX_TIMESTAMP(d)/(30*60))*(30*60)) as timeKey from y group 按时间键
上面的代码以 30 分钟为单位正确返回我的数据,但是我需要以某种方式调整它以包含 12:00 到 12:30
之间的所有内容,而不是 12:00 到 12:29
。
我曾尝试使用以下内容,但在分配值时不能使用 max
。
选择 max(v) - @lastV, from_unixtime(FLOOR(UNIX_TIMESTAMP(d)/(30*60))*(30*60)) 作为 timeKey,@lastv := v from `test`, (select @lastV:=0) lastV 按时间键分组
http://sqlfiddle.com/#!9/e8d74/4
我用一些可以用作示例的数据创建了上面的 SQL Fiddle。
有人有什么建议吗?
最佳答案
我今天早上想出的一个潜在解决方案:
选择 *, IF(@lastV, @lastV - minV, 0) as `usage`, @lastV := minV from (
选择 min(v) 作为 minV,max(v) 作为 maxV,from_unixtime(FLOOR(UNIX_TIMESTAMP(d)/(30*60))*(30*60)) 作为 timeKey from `test` group by timeKey order by timeKey desc
) 项, (选择@lastV:=0) lastV
http://sqlfiddle.com/#!9/e8d74/18/0
不幸的是,它仅在降序排序时有效并产生冗余行(第一行没有可比较的行)但是根据我的测试,该行不是必需的并且在读取数据时可以忽略。
如果有人有任何其他解决方案会有用吗?
关于mysql - 按时间间隔分组,包括下一个开始?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40019970/