V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
maitiantuzi
V2EX  ›  问与答

这种数据格式,数据库应该如何根据时间段查询?

  •  
  •   maitiantuzi · 2018-10-14 22:56:12 +08:00 · 1830 次点击
    这是一个创建于 2233 天前的主题,其中的信息可能已经有所发展或是发生改变。

    举个例子,一个温度传感器,当温度有变化的时候才上传数据,数据示例如下:

    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 条附言  ·  2018-10-14 23:31:48 +08:00
    更正:现在想查询 13:10:00 ~ 13:20:00 之间的数据,由数据可知这个区间的值为 20 和 22
    7 条回复    2018-10-15 00:02:31 +08:00
    kslr
        1
    kslr  
       2018-10-14 23:21:20 +08:00
    where >= 啊,mysql 还没写溜,mongdb 你玩的转吗
    maitiantuzi
        2
    maitiantuzi  
    OP
       2018-10-14 23:29:08 +08:00
    @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
    kslr
        3
    kslr  
       2018-10-14 23:37:24 +08:00
    @maitiantuzi 我不是太明白,你要查询 10 ~ 20 秒之间的数据。
    但是 20 在 05 秒,22 是 15 秒,错误在哪里
    qiayue
        4
    qiayue  
       2018-10-14 23:44:36 +08:00
    需求没描述清楚,你是想查询一个时间段内的所有数据,还是只想知道最小值和最大值?
    newtype0092
        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)。
    XiaoxiaoPu
        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
    qiayue
        7
    qiayue  
       2018-10-15 00:02:31 +08:00
    时序数据库了解一下
    专门用于存储你这种数据的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1033 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 18:48 · PVG 02:48 · LAX 10:48 · JFK 13:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.