更新时间:2024-09-19 GMT+08:00

SQL同比和环比函数

本文介绍同比和环比函数的基础语法和示例。

compare函数

compare函数用于对比当前时间周期内的计算结果与n秒之前时间周期内的计算结果。

语法格式

  • 对比当前时间周期内的计算结果与n秒之前时间周期内的计算结果。
    compare(x,n)
  • 对比当前时间周期内的计算结果与n1、n2、n3秒之前时间周期内的计算结果。
    compare(x, n1, n2, n3...)

参数说明

表1 同比函数参数说明

参数

说明

x

目标列的列名,参数值为double类型或long类型。

n

时间窗口,单位为秒。例如3600(1小时)、86400(1天)、604800(1周)、31622400(1年)。

返回类型

JSON数组。格式为[当前计算结果,n秒前的计算结果,当前计算结果与n秒前计算结果的比值]。

示例说明

计算当前1小时和昨天同时段的访问量比值。

  1. 选择查询和分析的时间范围为1小时(整点时间),并执行如下查询和分析语句。其中86400表示当前时间减去86400秒(1天)。
    SELECT
    compare(PV, 86400)
    FROM  (SELECT count(*) AS PV )
  2. 查询和分析结果
    图1 查询和分析结果
    • 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小时与昨天同时段的网站访问量比值。
  3. 分列显示查询和分析结果
    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...)

参数说明

表2 环比函数参数说明

参数

说明

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
          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]