ATHENA AWS 中 Qlik 中的 PEEK() 函数的替代方案是什么?

问题描述 投票:0回答:1

我希望将当前计算值作为 Athena AWS 中的字段进行增量,这可以在 Qlik 中使用 peek() 函数实现,目标是在每个投资者或项目激活状态中创建和增量状态字段,这是我的数据:

项目 投资者 日期 IS_ACTIF
P1 I1 010124 1
P1 I1 020124 1
P1 I1 030124 0
P1 I1 040124 1
P1 I2 050124 1
P1 I2 060124 0

这是期望的结果:

项目 投资者 日期 IS_ACTIF 状态
P1 I1 010124 1 1
P1 I1 020124 1 1
P1 I1 030124 0 2
P1 I1 030124 1 3
P1 I2 050124 1 1
P1 I2 060124 0 2

如何使用 Athena SQL 实现此目标?

使用 QLIK:

STATE:
NoConcatenate
LOAD DISTINCT  
    PROJECT,
    INVESTOR, 
    DATE,
    IS_ACTIF,    
    IF(RowNo()=1 OR Previous(PROJECT&INVESTOR)<>PROJECT&INVESTOR,1,
        IF(  IS_ACTIF=Previous(IS_ACTIF)
               ,peek(STATE),peek(STATE)+1) )                AS STATE
    
RESIDENT DATA ORDER BY PROJECT, INVESTOR,DATE;
sql amazon-athena qlikview qliksense
1个回答
0
投票

它并不是 Qlik 中

peek()
的实际替代品,但可以通过 Athena 中的窗口函数组合来完成:

SELECT PROJECT, 
       INVESTOR, 
       "DATE", 
       IS_ACTIF, 
       SUM(ABS(is_actif-lagged_actif)) OVER (PARTITION BY PROJECT, INVESTOR ORDER BY row_id) AS "STATE"
FROM 
    (
     SELECT *, ROW_NUMBER() OVER(PARTITION BY PROJECT, INVESTOR) as row_id, LAG(is_actif,1, 0) OVER(PARTITION BY PROJECT, INVESTOR) as lagged_actif
     FROM TEST_SO
     ) a

基本上,它对每个状态与其前一个状态之间的绝对差进行累积和。

© www.soinside.com 2019 - 2024. All rights reserved.