mysql - 按时间间隔分组,包括下一个开始?

标签 mysql sql time

我正在尝试构建一个查询,按时间间隔(即 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/

相关文章:

mysql - 选择具有完全相同的多对多关联的记录

php - 将 'yyyy-mm-dd hh:ii:ss' 格式的日期替换为 'yyyy-mm-05 hh:ii:ss' 的最短方法?

MySQL全文不搜索短电子邮件

mysql - 将记录转置为 mysql 中 3 个表的记录

java - 将 BufferedImage 转换为 Image 数据类型

mysql - 如何从snort sql中删除这个事件?

mysql - 我的sql查询对简单查询的优化

sql - INSTEAD OF INSERT 触发器和标识列使用 View

windows - 停止同步 windows 2008 r2 时钟

Python 夏令时