MongoDb中的Groupin连续数据

时间:2018-09-12 07:02:10

标签: sql mongodb grouping

我有按时间(按ASC顺序)存储在MongoDB中的点火数据,如:

1. **V_no**              **Ign**           **time** 
2. 001                     On                 1536721212 
3. 001                     On                 1536721213
4. 001                     On                 1536721220
5. 001                     Off                1536721221
6. 001                     Off                1536721222 
7. 001                     On                 1536721234
8. 001                     On                 1536721256
9. 001                     Off                1536721299

我正在寻找的是分组连续点火会话,输出如下:

1. **V_no**              **Ign**             **sTime**        **eTime**
2. 001                     On                 1536721212      1536721220
3. 001                     Off                1536721221      1536721222 
4. 001                     On                 1536721234      1536721256
5. 001                     Off                1536721299      1536721299

在R编程中,可以使用rleid(Ignition)来对连续点火数据进行分组,例如:

data %>% group(rleid(Ign)) %>% mutate(sTime=first(time),eTime=last(time))

我想要在MongoDB或Mysql中使用相同类型的解决方案。

2 个答案:

答案 0 :(得分:0)

如果您具有最新版本的MySQL,则可以使用row_number()

select v_no, ign, min(time), max(time)
from (select t.*, row_number() over (partition by v_no order by time) as seq1,
                  row_number() over (partition by v_no, ign order by time) as seq2
      from table t
     ) t
group by v_no, Ign, (seq1- seq2);

答案 1 :(得分:0)

以下是MongoDB中对此的查询

href="/#services"

请注意,如果您拥有大量数据,此查询将非常昂贵。