我有一个存储蓝牙检测信息的表。例如:
MACaddress | DetectorID | PollingIntervalStart | PollingIntervalEnd
00:00:00:00:00:01 | 3 | 2012-03-26 16:51:09.000 | 2012-03-26 16:51:19.000
00:00:00:00:00:01 | 3 | 2012-03-26 16:51:24.000 | 2012-03-26 16:51:28.000
00:00:00:00:00:01 | 3 | 2012-03-26 16:51:35.000 | 2012-03-26 16:51:49.000
00:00:00:00:00:01 | 3 | 2012-03-26 16:51:55.000 | 2012-03-26 16:52:09.000
00:00:00:00:32:11 | 3 | 2012-03-26 17:00:43.000 | 2012-03-26 17:01:19.000
00:00:00:00:20:F1 | 1 | 2012-03-26 17:02:52.000 | 2012-03-26 16:53:02.000
...
00:00:00:00:00:01 | 3 | 2012-03-26 19:21:19.000 | 2012-03-26 19:21:48.000
00:00:00:00:00:01 | 3 | 2012-03-26 19:21:59.000 | 2012-03-26 19:22:51.000
00:00:00:00:00:01 | 3 | 2012-03-26 19:22:19.000 | 2012-03-26 19:22:31.000
00:00:00:00:20:F1 | 1 | 2012-03-26 20:23:49.000 | 2012-03-26 19:50:30.000
detectorID 是轮询设备的蓝牙检测器的 ID。如您所见,有时设备会在检测器的轮询半径内徘徊,因此我们会得到同一设备的检测集群。我想要做的是对集群进行分组并对该集群进行第一次检测(意思是min(DetectionTime)
)(比如我们将集群定义为在三分钟内多次轮询同一设备)。请注意,检测器的轮询间隔长度不是恒定的。例如对于集群
00:00:00:00:00:01 | 3 | 2012-03-26 16:51:09.000 | 2012-03-26 16:51:19.000 -- take this record
00:00:00:00:00:01 | 3 | 2012-03-26 16:51:24.000 | 2012-03-26 16:51:28.000
00:00:00:00:00:01 | 3 | 2012-03-26 16:51:35.000 | 2012-03-26 16:51:49.000
00:00:00:00:00:01 | 3 | 2012-03-26 16:51:55.000 | 2012-03-26 16:52:09.000
我只想获得第一条记录。如上所述进行分组后,表格应如下所示:
MACaddress | DetectorID | PollingIntervalStart | PollingIntervalEnd
00:00:00:00:00:01 | 3 | 2012-03-26 16:51:09.000 | 2012-03-26 16:51:19.000
00:00:00:00:32:11 | 3 | 2012-03-26 17:00:43.000 | 2012-03-26 17:01:19.000
00:00:00:00:20:F1 | 1 | 2012-03-26 17:02:52.000 | 2012-03-26 16:53:02.000
...
00:00:00:00:00:01 | 3 | 2012-03-26 19:21:19.000 | 2012-03-26 19:21:48.000
00:00:00:00:20:F1 | 1 | 2012-03-26 20:23:49.000 | 2012-03-26 19:50:30.000
我尝试使用group by, ROW_NUMBER, RANK, DENSE_RANK
,但似乎无法弄清楚。我尝试使用计数表来制作时间间隔并按时间间隔加入,但这没有用。任何帮助表示赞赏。谢谢。
编辑
我所说的“团块”的意思是,如果在短时间内多次检测到同一设备,则将其视为团块。我将该时间间隔定义为 3 分钟。这个间隔长度是任意的,可以是任意分钟,但我只选择了 3 分钟。因此,如果在 3:00:22 和 3:00:34 和 3:01:44 检测到 MAC 地址,则所有三个检测都被视为一个簇。如果在 3:00:22 和 3:07:32 检测到它,则它不是团块。
它必须是第一次检测到团块。如果您有最后一次检测团块的代码,您也可以发布它。也许,我可以尝试使用 ROW_NUMBER 和降序来获得所需的输出。
编辑 2
我更改了 Aaron 的代码,使簇长度不再恒定。代码现在只检查集群分离。因此,任何间隔超过 3 分钟的检测都不会被视为集群。集群的这种新定义使代码更容易。