googlebigquery:保留列的上一个值

erhoui1w  于 2021-08-09  发布在  Java
关注(0)|答案(1)|浏览(350)

我有两列名为claim\u no&n proc\u rank。试图使用下面的逻辑。请在这里提供帮助
逻辑

a) if  claim_no=proc_rank then linenum=1
b) if  claim_no<>proc_rank then a+1
c) if  claim_no=proc_rank then value of b
d) if  claim_no<>proc_rank then c+1

我尝试使用带有case语句的lag函数,但是没有得到想要的结果&googlebigquery不支持递归查询。

nhn9ugyo

nhn9ugyo1#

下面是bigquery标准sql


# standardSQL

SELECT *, 1 + COUNTIF(claim_no != n_Proc_rank) OVER(ORDER BY ts) linenum
FROM `project.dataset.table`

如果要应用于您问题中的样本数据,请参见下面的示例


# standardSQL

WITH `project.dataset.table` AS (
  SELECT 1 ts, 1 claim_no, 1 n_Proc_rank UNION ALL
  SELECT 2, 0, 0 UNION ALL
  SELECT 3, 0, 0 UNION ALL
  SELECT 4, 1, 1 UNION ALL
  SELECT 5, 0, 1 UNION ALL
  SELECT 6, 0, 0 UNION ALL
  SELECT 7, 0, 1 UNION ALL
  SELECT 8, 0, 1 UNION ALL
  SELECT 9, 0, 1 UNION ALL
  SELECT 10, 0, 1 UNION ALL
  SELECT 11, 0, 0 UNION ALL
  SELECT 12, 0, 1 UNION ALL
  SELECT 13, 0, 0 UNION ALL
  SELECT 14, 0, 1 UNION ALL
  SELECT 15, 0, 1 UNION ALL
  SELECT 16, 0, 1 UNION ALL
  SELECT 17, 0, 1 
)
SELECT *, 1 + COUNTIF(claim_no != n_Proc_rank) OVER(ORDER BY ts) linenum
FROM `project.dataset.table`
-- ORDER BY ts

结果是

Row ts  claim_no    n_Proc_rank linenum  
1   1   1           1           1    
2   2   0           0           1    
3   3   0           0           1    
4   4   1           1           1    
5   5   0           1           2    
6   6   0           0           2    
7   7   0           1           3    
8   8   0           1           4    
9   9   0           1           5    
10  10  0           1           6    
11  11  0           0           6    
12  12  0           1           7    
13  13  0           0           7    
14  14  0           1           8    
15  15  0           1           9    
16  16  0           1           10   
17  17  0           1           11

注意:您必须有一些额外的列来定义顺序或处理,因此在我的示例中,我添加了ts列。它可以是任何内容-整数位置或日期/时间戳等。

相关问题