在SQL中翻转数组

时间:2018-12-04 10:52:37

标签: sql google-bigquery

我的原始表格如下:

id, date, 1, 2, 3,
 1    1   10 10 10 
 1    2   20 20 20 
 1    3   30 30 30 
 1    4   15 15 15

通过运行查询:

ARRAY_AGG(STRUCT(1, 2, 3)) OVER (PARTITION BY id ORDER BY date ROWS BETWEEN 2 
PRECEDING AND CURRENT ROW)

我得到这个输出

   1      2     3 
1  10    10     10
2  10    10     10
   20    20     20 
3  10    10     10 
   20    20     20  
   30    30     30 
4  20    20     20 
   30    30     30 
   15    15     15

我希望输出为:

 1      2     3 
1  10    10     10
2  20    20     20
   10    10     10 
3  30    30     30 
   20    20     20  
   10    10     10
4  15    15     15 
   30    30     30 
   20    20     20 

因此,从根本上讲,我在输出中获得的值都是正确的,但我希望翻转输出的顺序。有谁知道如何使用array(struct))类型的列呢?

1 个答案:

答案 0 :(得分:1)

一个选择是反转window子句的排序顺序,或者您可以使用调用ARRAY_REVERSE函数的简单解决方案:

ARRAY_REVERSE(
  ARRAY_AGG(STRUCT(col1, col2, col3)) OVER (
    PARTITION BY id ORDER BY date
    ROWS BETWEEN 2 PRECEDING AND CURRENT ROW)
)  

为了在此处拥有reverse the sort order of the window clause选项而在下面添加了

ARRAY_AGG(STRUCT(col1, col2, col3)) OVER(
    PARTITION BY id ORDER BY date DESC 
    ROWS BETWEEN CURRENT ROW AND 2 FOLLOWING)