举个例子,一个温度传感器,当温度有变化的时候才上传数据,数据示例如下:
data_value-------create_time
20 ------------- 2018-09-09 13:05:00
22 ------------- 2018-09-09 13:15:00
26 ------------- 2018-09-09 13:30:00
21 ------------- 2018-09-09 14:10:00
现在想查询 13:10:00 ~ 13:20:00 之间的数据,由数据可知这个区间的值为 10 和 22, 但是 sql 该如何写好呢?
ps:目前数据库为 mysql,下一步会迁移到 mongodb
1
kslr 2018-10-14 23:21:20 +08:00
where >= 啊,mysql 还没写溜,mongdb 你玩的转吗
|
2
maitiantuzi OP @kslr 你说的是 where create_time >= 2018-09-09 13:10:00 and create_time <= 13:10:00 13:20:00 吗?
这样只能查出 22 ------------- 2018-09-09 13:15:00 这条数据,实际上结果应该为 20,22,因为 2018-09-09 13:05:00 ~ 2018-09-09 13:15:00 之间的数据都是 20 |
3
kslr 2018-10-14 23:37:24 +08:00
@maitiantuzi 我不是太明白,你要查询 10 ~ 20 秒之间的数据。
但是 20 在 05 秒,22 是 15 秒,错误在哪里 |
4
qiayue 2018-10-14 23:44:36 +08:00
需求没描述清楚,你是想查询一个时间段内的所有数据,还是只想知道最小值和最大值?
|
5
newtype0092 2018-10-14 23:54:40 +08:00 2
@kslr 意思是 13:15:00 的数据是 22, 但 13:14:59 的数据还是 20。
@maitiantuzi 你这个明显是自己存的数据不足啊,你要查 13:10:00 的数据,却要依靠前一条 13:05:00 的数据才能得到完整的信息,明显表设计的有问题啊。 你要用这种时间段的话,就应该明确每一段的开始时间和结束时间,比如说把 create_time 改成 start_time 和 end_time,温度变化时,上一条数据的 end_time 更新为当前 time-1,然后新建一条数据,start_time 是当前 time,end_time 是 null。 如果不改表结构,也可以多插一条数据标记结束时间,插入(22, 2018-09-09 13:15:00)之前,多插入一条(20, 2018-09-09 13:14:59)。 |
6
XiaoxiaoPu 2018-10-14 23:58:51 +08:00
感觉需要 2 个 sql,第一个 where create_time <= 2018-09-09 13:10:00 order by create_time desc limit1,第二个 where create_time > 2018-09-09 13:10:00 and create_time <= 2018-09-09 13:20:00
|
7
qiayue 2018-10-15 00:02:31 +08:00
时序数据库了解一下
专门用于存储你这种数据的 |