如何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.