
# 同比和环比函数
本文介绍同比和环比函数的语法规则，包括参数解释、函数示例等。
#### 函数列表
表1同比和环比函数 
| 函数                                                                                                                                                                                | 描述                                                   |
|:---|:---|
| [compare函数]     | 用于对比当前时间周期内的计算结果与n秒之前时间周期内的计算结果。                     |
| [ts_compare函数] | 用于对比当前时间周期内的计算结果与n秒之前时间周期内的计算结果。该函数在结果数组中额外返回毫秒级时间戳。 |
   
 #### compare函数
- 用于对比当前时间周期内的计算结果与n秒之前时间周期内的计算结果。
  ```
  compare(x, n)
  ```
  
- 对比当前时间周期内的计算结果与n1、n2、n3秒之前时间周期内的计算结果。
  ```
  compare(x, n1, n2, n3...)
  ```
  
表2参数说明 
| 参数名称 | 描述                                                       | 类型          | 是否必选 |
|:---|:---|:---|:---|
| x    | 需要对比的聚合函数结果字段。                                           | double或long | 是    |
| n?   | 时间窗口，单位为秒。例如3600（1小时）、86400（1天）、604800（1周）、31622400（1年）。 | long        | 是    |
   
**返回类型**
JSON数组。格式为\[当前计算结果,n秒前的计算结果,当前计算结果与n秒前计算结果的比值\]。
**示例说明**
计算当前1小时和昨天同时段的访问量比值。
1. 选择查询和分析的时间范围为**1** **小时（整点时间）** ，并执行如下查询和分析语句。其中**86400** 表示当前时间减去86400秒(1天)。
   ```
   SELECT
   compare(PV, 86400)
   FROM  (SELECT count(*) AS PV )
   ```
   
2. 查询和分析结果。
   - **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查询和分析结果   
   ![](https://support.huaweicloud.com/usermanual-lts/zh-cn_image_0000002349787657.png "点击放大") 
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查询和分析结果   
   ![](https://support.huaweicloud.com/usermanual-lts/zh-cn_image_0000002349707861.png "点击放大") 
 
 #### ts_compare函数
ts_compare函数用于对比当前时间周期内的计算结果与n秒之前时间周期内的计算结果。ts_compare函数必须按照时间列进行分组（GROUP BY）。
**语法** **格式**
- 对比当前时间周期内的计算结果与n秒之前时间周期内的计算结果。
  ```
  ts_compare(x, n)
  ```
  
- 对比当前时间周期内的计算结果与n1、n2、n3秒之前时间周期内的计算结果。
  ```
  ts_compare(x, n1, n2, n3...)
  ```
  
表3环比函数参数说明 
| **参数** | 说明                                                       |
|:---|:---|
| 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\]  |
     
  
 
