同比和环比函数
本文介绍同比和环比函数的语法规则,包括参数解释、函数示例等。
函数列表
| 函数 | 描述 | 
|---|---|
| 用于对比当前时间周期内的计算结果与n秒之前时间周期内的计算结果。 | |
| 用于对比当前时间周期内的计算结果与n秒之前时间周期内的计算结果。该函数在结果数组中额外返回毫秒级时间戳。 | 
compare函数
- 用于对比当前时间周期内的计算结果与n秒之前时间周期内的计算结果。
    compare(x, n) 
- 对比当前时间周期内的计算结果与n1、n2、n3秒之前时间周期内的计算结果。
    compare(x, n1, n2, n3...) 
| 参数名称 | 描述 | 类型 | 是否必选 | 
|---|---|---|---|
| x | 需要对比的聚合函数结果字段。 | double或long | 是 | 
| n? | 时间窗口,单位为秒。例如3600(1小时)、86400(1天)、604800(1周)、31622400(1年)。 | long | 是 | 
返回类型
JSON数组。格式为[当前计算结果,n秒前的计算结果,当前计算结果与n秒前计算结果的比值]。
示例说明
计算当前1小时和昨天同时段的访问量比值。
- 选择查询和分析的时间范围为1小时(整点时间),并执行如下查询和分析语句。其中86400表示当前时间减去86400秒(1天)。
    SELECT compare(PV, 86400) FROM (SELECT count(*) AS PV ) 
- 查询和分析结果。
    - 5994.0表示当前1小时(例如2021-01-02 00:00:00~2021-01-02 01:00:00)的网站访问量。
- 6000.0表示昨天同时段(例如2021-01-01 00:00:00~2021-01-01 01:00:00)的网站访问量。
- 0.999表示当前1小时与昨天同时段的网站访问量比值。
 图1 查询和分析结果  
- 分列显示查询和分析结果。
    SELECT diff[1] as "today", diff[2] as "yesterday", diff[3] as "ratio" FROM(SELECT compare(pv, 86400) AS diff FROM (SELECT count(*) AS pv )) 图2 查询和分析结果  
ts_compare函数
ts_compare函数用于对比当前时间周期内的计算结果与n秒之前时间周期内的计算结果。ts_compare函数必须按照时间列进行分组(GROUP BY)。
语法格式
- 对比当前时间周期内的计算结果与n秒之前时间周期内的计算结果。
    ts_compare(x, n) 
- 对比当前时间周期内的计算结果与n1、n2、n3秒之前时间周期内的计算结果。
    ts_compare(x, n1, n2, n3...) 
| 参数 | 说明 | 
|---|---|
| x | 参数值为double类型或long类型。 | 
| n | 时间窗口,单位为秒。例如3600(1小时)、86400(1天)、604800(1周)、31622400(1年)。 | 
返回类型
JSON数组。格式为[当前计算结果, n秒前的计算结果, 当前计算结果与n秒前计算结果的比值, n秒前的UNIX时间戳]。
示例说明
环比今天3小时与昨天3小时的网站访问量。
选择查询和分析的时间范围为今天某3小时,并执行如下查询和分析语句。其中86400表示当前时间减去86400秒(1天),date_trunc('hour',__time)表示使用date_trunc函数将时间对齐到小时。
- 查询和分析语句
    * | SELECT t_time, ts_compare(PV, 86400) AS data FROM( SELECT to_unixtime(date_trunc('hour', __time)) AS t_time, count(*) AS PV GROUP BY t_time ORDER BY t_time ) GROUP BY t_time
- 查询和分析结果 
    t_time data 2021-10-26T06:00:00.000Z [159.0,224.0,0.7098214285714286,1.6351416E9] 2021-10-26T07:00:00.000Z [100.0,148.0,0.6756756756756757,1.6351452E9] 2021-10-26T08:00:00.000Z [100.0,100.0,1.0, 1.6016544E9, 1.6351488E9] 
 
    