SQL:对每个设备集连续出现相同值的所有记录进行计数,并返回最高计数

我想找出一个特定值连续出现在特定分区上的次数,然后显示该分区的较高计数。

例如,下表如下:

library(data.table)
rbind(setDT(data),data[,.(cause = paste(unique(cause),collapse=''),value = sum(value)),.(age)])

我想知道每个设备连续出现相同速度的最高次数。

因此,如果我按设备ID对它们进行分区,则会得到belo表

Device ID        speed             DateTime
--------------------------------------------------
07777778999       34               18-12-2016 17:15
07777778123       15               18-12-2016 18:10
07777778999       34               19-12-2016 19:30
07777778999       34               19-12-2016 12:15
07777778999       20               19-12-2016 13:15
07777778999       20               20-12-2016 11:15
07777778123       15               20-12-2016 9:15
07777778128       44               20-12-2016 17:15
07777778123       15               20-12-2016 17:25
07777778123       12               20-12-2016 17:35
07777778999       34                20-12-2016 17:45
07777778999       34               20-12-2016 17:55
07777778999       34               20-12-2016 18:50
07777778999       34               20-12-2016 18:55

所以我所需的输出将是

Device ID        speed             DateTime
--------------------------------------------------
07777778999       34               18-12-2016 17:15
07777778999       34               19-12-2016 19:30
07777778999       34               19-12-2016 12:15
07777778999       20               19-12-2016 13:15
07777778999       20               20-12-2016 11:15
07777778999       34                20-12-2016 17:45
07777778999       34               20-12-2016 17:55
07777778999       34               20-12-2016 18:50
07777778999       34               20-12-2016 18:55
07777778123       15               18-12-2016 18:10
07777778123       15               20-12-2016 9:15
07777778123       15               20-12-2016 17:25
07777778123       12               20-12-2016 17:35
07777778128       44               20-12-2016 17:15
-----------------------------------------------------------------

请注意,由于没有连续重复的值,因此未显示07777778128。''

实现此目标的可能方法是什么。 我能够获得每个设备的所有连续值的计数,但是它并没有给出最高的计数,而是给出了所有此类连续组的计数

dzx1015 回答:SQL:对每个设备集连续出现相同值的所有记录进行计数,并返回最高计数

这是一种差距与孤岛的形式。您可以使用不同的行号来获取孤岛:

select device_id,speed,count(*) as num_times
from (select t.*,row_number() over (partition by device_id order by datetime) as seqnum,row_number() over (partition by device_id,speed order by datetime) as seqnum_s
      from t
     ) t
group by device_id,(seqnum - seqnum_s);

然后,要获得最大值,请使用另一层窗口函数:

select device_id,num_times
from (select device_id,count(*) as num_times,row_number() over (partition by device_id order by count(*) desc) as seqnum
      from (select t.*,speed order by datetime) as seqnum_s
            from t
           ) t
      group by device_id,(seqnum - seqnum_s)
     ) ds
where seqnum = 1;
本文链接:https://www.f2er.com/3034259.html

大家都在问