我正在尝试实施“按平台花费的时间”指标,按用户和日分组。
我的测试数据为两个用户中的每一个都有15个事件,这15个事件在三天内分开。但是,特定用户/日组合的五个事件都发生在完全相同的时刻,因此为了我的“花费时间”计算的目的,它们应该仅被计为单个“时间单位”。我将“时间单位”定义为至少包含用户事件的分钟。
到目前为止,这是我的尝试:
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
我可以看到这是预期的结果集,但它不是我正在寻找的数据。由于单个用户/天组合的五个事件中的每一个都在同一分钟发生,因此结果中的sum
值应全部为1
。
所以,我需要一种方法将SELECT COUNT(score_value) as x FROM user_scores GROUP BY time(1m),user_id
转换为返回0或1的内容,具体取决于该分钟内是否发生任何事件
答案 0 :(得分:0)
我明白了,有效的方法如下:
SELECT COUNT(x)FROM(SELECT COUNT(score_value)as x FROM user_scores GROUP BY time(1m),user_id)WHERE x> 0 GROUP BY时间(1d),user_id
基本上我将外部SELECT SUM(x)
更改为SELECT COUNT(x)
并添加了where x > 0
。