【发布时间】:2019-09-07 01:31:09
【问题描述】:
我有两张桌子:
- 职位
- 设备
i 位置表中的数百万条数据。我与设备和位置有一对多的关系。任何设备都有很多位置。
位置表的属性是
id、deviceid、servertime、latitude、longitude、attributes
位置表的数据样本是
`3127557`, `2`, `'2019-08-08 09:00:16'`, `27.72634`, `85.303055`, `'{\"ignition\":false,\"status\":4294949887,\"io1\":\"429\",\"io2\":\"02\",\"io3\":\"00104\",\"io4\":\"33312\",\"distance\":1.98,\"totalDistance\":1215137.92,\"motion\":true}'`;
┌─────────┬──────────┬─────────────────────┬──────────┬───────────┬─────────────────────────────────────────────┐
│ id │ deviceid │ servertime │ latitude │ longitude │ attributes │
├─────────┼──────────┼─────────────────────┼──────────┼───────────┼─────────────────────────────────────────────┤
│ 3127557 │ 2 │ 2019-08-08 09:00:16 │ 27.72634 │ 85.303055 │ "ignition":FALSE, "status":4294949887, │
│ │ │ │ │ │ "io1": "429", "io2": "02", "io3": "00104", │
│ │ │ │ │ │ "io4": "33312", "distance":1.98, │
│ │ │ │ │ │ "totalDistance":1215137.92, "motion":TRUE │
└─────────┴──────────┴─────────────────────┴──────────┴───────────┴─────────────────────────────────────────────┘
附加信息:我在 json 格式的属性列中有 totalDistance 索引,每次添加新位置时都会增加。
现在我需要检索在特定日期间隔(例如 2018-08-23 到 2018-08-30 之间)之间的巴士行驶距离的每日报告。
select deviceid, min(id), max(date(id) from posiotins
where deviceid in [2,3,6]
group by date(servetime)
将这些 id 保存在数组 ids[] 和
再次Select * from postions where ids in [ids] order by deviceid, id
然后我从连续的第 2 个值减去第一个值的总距离,以获得每日行驶距离报告
【问题讨论】:
-
不使用
max(date(id),为什么还要计算它? -
他们为我提供了每个设备每天的位置的第一个和最后一个实例。我已将它们保存在数组中,并将其作为数组传递给另一个查询。
-
你正在失去从午夜之前到午夜之后的距离。
-
你说“一定的时间间隔”——你的意思是日期还是秒?
-
我的意思是说日期,我已经编辑了问题。
标签: mysql sql optimization bigdata