我正在尝试将基于日期/时间戳记的资产跟踪记录组合在一起,并且我很难过,希望有人能够轻松实现这一目标。
我有一个包含以下列的表:
示例数据集如下所示:
09 , 2016-02-01 18:57:23.000 , zone_0
10 , 2016-02-01 18:57:23.000 , zone_1
10 , 2016-02-01 18:57:34.000 , zone_1
10 , 2016-02-01 18:57:45.000 , zone_2
11 , 2016-02-01 18:56:17.000 , zone_3
11 , 2016-02-01 18:56:32.000 , zone_3
11 , 2016-02-01 18:56:43.000 , zone_3
11 , 2016-02-01 18:56:48.000 , zone_3
12 , 2016-02-01 18:56:43.000 , zone_1
12 , 2016-02-01 18:56:53.000 , zone_1
12 , 2016-02-01 18:57:54.000 , zone_3
12 , 2016-02-01 18:59:01.000 , zone_3
12 , 2016-02-01 18:59:14.000 , zone_1
12 , 2016-02-01 18:59:45.000 , zone_1
10 , 2016-02-01 18:58:23.000 , zone_1
10 , 2016-02-01 18:59:56.000 , zone_1
我想知道的是,在移动到下一个区域之前,每个资产在区域中花费了多长时间?我无法在zone_name上进行分组,因为我想知道资产从区域1移动到区域2然后再次回到区域1。
我正在寻找的输出是:
使用以下数据集:
09 , zone_0 , 2016-02-01 18:57:23.000 , 2016-02-01 18:57:34.000
10 , zone_1 , 2016-02-01 18:57:23.000 , 2016-02-01 18:57:34.000
10 , zone_2 , 2016-02-01 18:57:45.000 , 2016-02-01 18:57:45.000
10 , zone_1 , 2016-02-01 18:58:23.000 , 2016-02-01 18:59:56.000
11 , zone_3 , 2016-02-01 18:56:43.000 , 2016-02-01 18:56:48.000
12 , zone_1 , 2016-02-01 18:56:43.000 , 2016-02-01 18:56:53.000
12 , zone_3 , 2016-02-01 18:57:54.000 , 2016-02-01 18:59:01.000
12 , zone_1 , 2016-02-01 18:59:14.000 , 2016-02-01 18:59:14.000
答案 0 :(得分:1)
您需要识别相同的区域组。一种技术是“行数差异”方法。这将为每个区域分配一个分组ID,然后可以将其用于聚合:
select asset_id, zone_name, min(date_time_stamp), max(date_time_stamp)
from (select t.*,
(row_number() over (partition by asset_id order by date_time_stamp) -
row_number() over (partition by asset_id, zone_name order by date_time_stamp)
) as grp
from t
) t
group by asset_id, zone_name, grp;
这种方法中的“魔力”是行数的差异。我建议您运行子查询以查看它产生的内容。 。 。您还可以单独计算行数,以便更好地了解它的工作原理。