如何select包含一个事件的时间段数?
How to select the number of time segments that contain a event?
我正在尝试实施 "time spent on platform" 指标,按用户和日期分组。
我的测试数据有两个用户各有 15 个事件,这 15 个事件分布在三天内。然而,特定 user/day 组合的五个事件都在同一时刻发生,因此出于我的 "time spent" 计算的目的,它们应该只算作一个 "time unit"。我将 "time unit" 定义为至少包含用户事件的一分钟。
这是我目前的尝试:
SELECT SUM(x) FROM (SELECT COUNT(score_value) as x FROM user_scores GROUP BY time(1m),user_id) GROUP BY time(1d),user_id
name: user_scores
tags: user_id=123
time sum
---- ---
1518134400000000000 5
1518220800000000000 5
1518307200000000000 5
1518393600000000000
name: user_scores
tags: user_id=456
time sum
---- ---
1518134400000000000 5
1518220800000000000 5
1518307200000000000 5
我可以看出这是预期的结果集,但这不是我要查找的数据。由于单个 user/day 组合的五个事件中的每一个都在同一分钟发生,因此结果中的 sum
值应该都是 1
.
所以,我需要一种方法将 SELECT COUNT(score_value) as x FROM user_scores GROUP BY time(1m),user_id
转换为 returns 0 或 1,具体取决于在那一分钟内是否发生了 any 事件
我弄明白了,工作原理如下:
SELECT COUNT(x) FROM (SELECT COUNT(score_value) as x FROM user_scores GROUP BY time(1m),user_id) WHERE x > 0 GROUP BY time(1d),user_id
基本上我将外部 SELECT SUM(x)
更改为 SELECT COUNT(x)
并添加了 where x > 0
.
我正在尝试实施 "time spent on platform" 指标,按用户和日期分组。
我的测试数据有两个用户各有 15 个事件,这 15 个事件分布在三天内。然而,特定 user/day 组合的五个事件都在同一时刻发生,因此出于我的 "time spent" 计算的目的,它们应该只算作一个 "time unit"。我将 "time unit" 定义为至少包含用户事件的一分钟。
这是我目前的尝试:
SELECT SUM(x) FROM (SELECT COUNT(score_value) as x FROM user_scores GROUP BY time(1m),user_id) GROUP BY time(1d),user_id
name: user_scores
tags: user_id=123
time sum
---- ---
1518134400000000000 5
1518220800000000000 5
1518307200000000000 5
1518393600000000000
name: user_scores
tags: user_id=456
time sum
---- ---
1518134400000000000 5
1518220800000000000 5
1518307200000000000 5
我可以看出这是预期的结果集,但这不是我要查找的数据。由于单个 user/day 组合的五个事件中的每一个都在同一分钟发生,因此结果中的 sum
值应该都是 1
.
所以,我需要一种方法将 SELECT COUNT(score_value) as x FROM user_scores GROUP BY time(1m),user_id
转换为 returns 0 或 1,具体取决于在那一分钟内是否发生了 any 事件
我弄明白了,工作原理如下:
SELECT COUNT(x) FROM (SELECT COUNT(score_value) as x FROM user_scores GROUP BY time(1m),user_id) WHERE x > 0 GROUP BY time(1d),user_id
基本上我将外部 SELECT SUM(x)
更改为 SELECT COUNT(x)
并添加了 where x > 0
.