在SQL / LookerML中,如何测量几天的平均计数,每一天都有自己的数据点

问题描述

我有下表:

id | decided_at        | reviewer
1    2020-08-10 13:00   john
2    2020-08-10 14:00   john
3    2020-08-10 16:00   john
4    2020-08-12 14:00   jane
5    2020-08-12 17:00   jane
6    2020-08-12 17:50   jane
7    2020-08-12 19:00   jane

我想做的是获取每天minmax之间的差,并从ID的最小值(最小值与最小值之间的范围)中得出总计count和最大,以及最大目前,我只能获取过去一天的数据。

所需的输出:

Date       | Time(h) | Count | reviewer
2020-08-10   3         3       john
2020-08-12   5         4       jane

由此,我希望获得过去x天的平均展示次数。

示例: 如果今天是13日,请过滤过去2天(48小时) 输出:

reviewer | reviews/hour
jane        5/4 = 1.25

示例2: 如果今天是13日,请过滤过去3天(48小时)

reviewer | reviews/hour
john       3/3 = 1
jane       5/4 = 1.25

理想情况下,如果在LookML中无需使用此表是可能的,那么最好使用它。否则,SQL解决方案将是不错的选择,我可以尝试转换为LookerML。

谢谢!

解决方法

在SQL中,一种解决方案是使用两个级别的聚合:

select reviewer,sum(cnt) / sum(diff_h) review_per_hour
from (
    select
        reviewer,date(decided_at) decided_date,count(*) cnt,timestampdiff(hour,min(decided_at),max(decided_at)) time_h
    from mytable
    where decided_at >= current_date - interval 2 day
    group by reviewer,date(decided_at)
) t
group by reviewer

子查询按日期范围进行过滤,并按审阅者和日期进行汇总,并以小时为单位计算记录数以及最小和最大日期之间的差。然后,外部查询由审阅者聚合并进行最终计算。

计算日期差的实际函数在各个数据库中有所不同; MySQL支持timestampdiff()-其他引擎都有替代选择。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...