我有一个包含以下列的表:customer_id,event_date_time
我想知道一个客户从事件开始后每12小时触发一次事件的次数。 换句话说,按客户汇总事件之间的时间长达12小时。
例如,如果客户在中午,下午1:30,下午5点,凌晨2点和下午3点触发事件(按顺序),我会想要返回中午,凌晨2点和下午3点的记录。
我写了这个查询:
select
cust_id,
event_datetime,
nvl(24*(event_datetime - lag(event_datetime) over (partition BY cust_id ORDER BY event_datetime)),0) as difference
from
tbl
我觉得我很接近这一点。有没有办法添加像
这样的东西 over (partition BY cust_id, sum(difference)<12 ORDER BY event_datetime)
编辑:我正在添加一些示例数据:
+---------+-----------------+-------------+---+
| cust_id | event_datetime | DIFFERENCE | X |
+---------+-----------------+-------------+---+
| 1 | 6/20/2015 23:35 | 0 | x |
| 1 | 6/21/2015 0:09 | 0.558611111 | |
| 1 | 6/21/2015 0:49 | 0.667777778 | |
| 1 | 6/21/2015 1:30 | 0.688333333 | |
| 1 | 6/21/2015 9:38 | 8.133055556 | |
| 1 | 6/21/2015 10:09 | 0.511111111 | |
| 1 | 6/21/2015 10:45 | 0.600555556 | |
| 1 | 6/21/2015 11:09 | 0.411111111 | |
| 1 | 6/21/2015 11:32 | 0.381666667 | |
| 1 | 6/21/2015 11:55 | 0.385 | x |
| 1 | 6/21/2015 12:18 | 0.383055556 | |
| 1 | 6/21/2015 12:23 | 0.074444444 | |
| 1 | 6/22/2015 10:01 | 21.63527778 | x |
| 1 | 6/22/2015 10:24 | 0.380555556 | |
| 1 | 6/22/2015 10:46 | 0.373611111 | |
+---------+-----------------+-------------+---+
&#34; x&#34;是因为它们是12小时区块中的第一条记录而应该被拉出的记录。
答案 0 :(得分:0)
如果我理解正确,你需要每个12小时块中的第一条记录,其中时间块由第一个事件时间定义。
如果是这样,您需要修改您的查询以获得与每个客户的* first *时间的差异。其余的只是算术。查询看起来像这样:
{{1}}