Uso de filas entre para controlar el rango de la ventana en colmena

1. El papel de las filas entre

  在使用hsql完成一些业务需求的时候,我们经常会用到窗口函数,某些场景
下会涉及到需要控制窗口函数的范围来满足业务需求,这个时候就需要用到rows
between了,使用rows between可以根据自己的需求任意的控制窗口函数的范围。

2. El uso de filas entre

首先我们有一张如下的数据表
Sid tiempo de día sale_volume
101 2020-01-03 10
102 2020-01-04 20
103 2020-01-05 30
104 2020-01-06 40
104 2020-01-07 50
105 2020-02-05 33
106 07/02/2020 43
107 2020-02-08 53
108 2020-02-09 63
109 2020-02-10 73
110 2020-03-07 21
111 2020-03-08 31
112 2020-03-09 41
113 2020-03-10 51
114 2020-03-11 61
115 2020-03-12 71
116 2020-03-13 81
1. 求当前日期销售额和后面所有日期的销售额总和。
这里就需要使用使用row between来控制范围,范围就是最后一行到当前行
sql如下:
SELECT
  sid,
  day_time,
  sales_volume,
  sum(sales_volume) over(rows between current row and unbounded following) sum_sales
FROM
t_sale_info;

-- 语法解析
rows between current row and unbounded following
/* 这里面current row就是指当前行,unbounded following就是指最后一行,
and前面和后面的关系就是范围,从and后面的到and前面,但是and前面是不可以
使用unbounded following的,这样使用是错误的*/
查询结果如下:
Sid tiempo de día sale_volume sum_sales
116 2020-03-13 81 772.0
115 2020-03-12 71 691.0
114 2020-03-11 61 620,0
113 2020-03-10 51 559,0
112 2020-03-09 41 508,0
111 2020-03-08 31 467,0
110 2020-03-07 21 436,0
109 2020-02-10 73 415.0
108 2020-02-09 63 342.0
107 2020-02-08 53 279.0
106 07/02/2020 43 226.0
105 2020-02-05 33 183,0
104 2020-01-07 50 150,0
104 2020-01-06 40 100,0
103 2020-01-05 30 60,0
102 2020-01-04 20 30,0
101 2020-01-03 10 10.0
    通过查询结果可以看出来,sum_salses这一列中的每一行都是后面所有行到
当前行的总和。

2.求当前日期销售额和前面所有日期的销售额总和。
这里就需要使用使用row between来控制范围,范围就是最后一行到当前行
sql如下:
SELECT
  sid,
  day_time,
  sales_volume,
  sum(sales_volume) over(rows between unbounded preceding and current row) sum_sales
FROM
t_sale_info;
-- 语法解析
rows between unbounded preceding and current row
/*这里的unbounded preceding就是第一行数据,current row就是当前行
数据,关于and前和and后的关系前面说过了这里就不细说了*/
查询结果数据如下:
Sid tiempo de día sale_volume sum_sales
116 2020-03-13 81 81,0
115 2020-03-12 71 152,0
114 2020-03-11 61 213.0
113 2020-03-10 51 264,0
112 2020-03-09 41 305.0
111 2020-03-08 31 336.0
110 2020-03-07 21 357,0
109 2020-02-10 73 430.0
108 2020-02-09 63 493,0
107 2020-02-08 53 546.0
106 07/02/2020 43 589,0
105 2020-02-05 33 622.0
104 2020-01-07 50 672.0
104 2020-01-06 40 712.0
103 2020-01-05 30 742,0
102 2020-01-04 20 762.0
101 2020-01-03 10 772.0
  通过查询结果可以看出来,sum_salses这一列中的每一行都是前面所有行到
当前行的总和。

3. 求当前日期和后面两天销售额的总和。
sql如下:
SELECT
  sid,
  day_time,
  sales_volume,
  sum(sales_volume) over(rows between current row and 2 following) sum_sales
FROM
t_sale_info;
-- 语法解析
/*current row是指当前行,2 following就是后两行数据*/
查询结果如下:
Sid tiempo de día sale_volume sum_sales
116 2020-03-13 81 213.0
115 2020-03-12 71 183,0
114 2020-03-11 61 153,0
113 2020-03-10 51 123,0
112 2020-03-09 41 93,0
111 2020-03-08 31 125,0
110 2020-03-07 21 157,0
109 2020-02-10 73 189,0
108 2020-02-09 63 159,0
107 2020-02-08 53 129.0
106 07/02/2020 43 126,0
105 2020-02-05 33 123,0
104 2020-01-07 50 120,0
104 2020-01-06 40 90,0
103 2020-01-05 30 60,0
102 2020-01-04 20 30,0
101 2020-01-03 10 10.0
  通过查询结果可以看出来,sum_salses这一列中的每一行都是后面两行到
当前行的总和。

4. 求当前日期和前一天销售额的总和。
sql如下:
SELECT
  sid,
  day_time,
  sales_volume,
  sum(sales_volume) over(rows between 1 preceding and current row) sum_sales
FROM
t_sale_info;
-- 语法解析
/*1 preceding 就是指上一行数据,current row就是指当前行数据*/
查询结果如下:
Sid tiempo de día sale_volume sum_sales
116 2020-03-13 81 81,0
115 2020-03-12 71 152,0
114 2020-03-11 61 132,0
113 2020-03-10 51 112,0
112 2020-03-09 41 92,0
111 2020-03-08 31 72,0
110 2020-03-07 21 52,0
109 2020-02-10 73 94,0
108 2020-02-09 63 136,0
107 2020-02-08 53 116,0
106 07/02/2020 43 96,0
105 2020-02-05 33 76,0
104 2020-01-07 50 83,0
104 2020-01-06 40 90,0
103 2020-01-05 30 70,0
102 2020-01-04 20 50,0
101 2020-01-03 10 30,0
  通过查询结果可以看出来,sum_salses这一列中的每一行都是前面一行到
当前行的总和。

  通过以上几个例子可以看到,使用rows between可以很灵活的控制窗口函数
的作用范围,这个在日常业务中如果能灵活使用可以很好的加快我们的工作效率
希望对大家有所帮助。

Supongo que te gusta

Origin blog.csdn.net/AnameJL/article/details/112863893
Recomendado
Clasificación