我有一张table table_a
:
event_id event_start process_id process_start name country
A1 2020-07-01 21:19:01 B1 2020-07-01 21:20:05 google US
A1 2020-07-01 21:19:01 B2 2020-07-01 21:21:01 google US
A1 2020-07-01 21:19:01 B3 2020-07-01 21:23:04 google US
A4 2020-07-01 14:59:12 C1 2020-07-01 15:01:14 bing UK
A5 2020-07-01 12:39:14 D1 2020-07-01 12:49:13 bing CA
A6 2020-07-01 11:49:46 E1 2020-07-01 11:52:59 facebook US
在这张table上我有 event_id
也可以是一样的,如果 event_id
是一样的吗 event_start
也一样。 process_id
是唯一的,进程启动时可以有重复项。我想计算一下 event_start
以及 process_start
对于每个 event_id
,问题是 event_start
有相同的时间但是 process_start
可以有不同的时间戳。我想从酒店取两次 process_start
如果他们不止一个。第一个是最早的(分钟) process_start
最新(最大值) process_start
所以我想要的输出是这样的:
event_id event_start process_id process_start name country earliest_diff_minute latest_diff_minute
A1 2020-07-01 21:19:01 B1 2020-07-01 21:20:05 google US 1 (2020-07-01 21:20:05 - 2020-07-01 21:19:01) 3 (2020-07-01 21:23:05 - 2020-07-01 21:19:04)
A1 2020-07-01 21:19:01 B3 2020-07-01 21:23:04 google US 1 (2020-07-01 21:20:05 - 2020-07-01 21:19:01) 3 (2020-07-01 21:23:05 - 2020-07-01 21:19:04)
A4 2020-07-01 14:59:12 C1 2020-07-01 15:01:14 bing UK 2 ( 2020-07-01 15:01:14 - 2020-07-01 14:59:12) 2 ( 2020-07-01 15:01:14 - 2020-07-01 14:59:12)
A5 2020-07-01 12:39:14 D1 2020-07-01 12:49:13 bing CA 10 10
A6 2020-07-01 11:49:46 E1 2020-07-01 11:52:59 facebook US 3 3
所以如果 process_id
是唯一的,最小和最大时间差将是相同的。如果大于1,则记录最大值和最小值,同时丢弃中间的所有值。
2条答案
按热度按时间31moq8wy1#
我想复制品
name
以及country
. 你可以只使用窗口函数,尤其是min()
以及max()
要获取每个分组的最早和最新处理日期,请执行以下操作:wtzytmuj2#
我认为有很多方法可以达到你的目标,这是我第一次想到的
基本上,在子查询中为每一行检索第一个和最后一个进程。然后只检索进程开始时间等于其中一个的行,然后计算日期差。