【问题标题】:SQL Script - manipulate value based on previous non zero valueSQL 脚本 - 根据先前的非零值操作值
【发布时间】:2015-04-01 11:02:19
【问题描述】:

我正在使用 HANA SQL 脚本,计算后视图/表中的数据显示如下

Col A       Col B       Col C
1000042965  20090830    15.9
1000042965  20090906    0
1000042965  20090913    0
1000042965  20090920    14.2
1000042965  20090927    0
1000042965  20091004    0
1000042965  20091011    14.4
1000042967  20090830    13.2
1000042967  20090906    0
1000042967  20090913    12.9
1000042967  20090920    0
1000042967  20090927    0
1000042967  20091004    11.2
1000042967  20091011    11.2

我的预期输出为

Col A       Col B       Excepted Result for Col C
1000042965  20090830    15.9
1000042965  20090906    15.9
1000042965  20090913    15.9
1000042965  20090920    14.2
1000042965  20090927    14.2
1000042965  20091004    14.2
1000042965  20091011    14.4
1000042967  20090830    13.2
1000042967  20090906    13.2
1000042967  20090913    12.9
1000042967  20090920    12.9
1000042967  20090927    12.9
1000042967  20091004    11.2
1000042967  20091011    11.2

我只想返回以前的非空值。我尝试使用 Windows LAG 功能,但我想要的输出与上面不同。

LAG(col C) OVER (partition by Col A)

我参考了以下链接并尝试实现相同的逻辑,但我仍然无法获得 Finding the previous non-zero value from an date-ordered list

SELECT distinct col A, Col B,
CASE WHEN col C = 0 THEN 
    IFNULL(( SELECT col C
     FROM  TABLE as T2 
     WHERE CAST(T2.col B AS DATE) < T1.col B AND T1.Col A = T2.col A AND T2.Col C > 0 
     ),0)
    ELSE Col C END Col C
FROM TABLE as T1

【问题讨论】:

    标签: sql hana


    【解决方案1】:

    我的猜测是问题在于子查询没有order bylimit(我认为Hana SQL使用limit),所以它可以返回不止一行。

    查询本身很难阅读。你不应该在列名中有空格,所以这样的事情可能会起作用:

    SELECT colA, ColB,
           (CASE WHEN colC = 0
                 THEN IFNULL((SELECT colC
                              FROM TABLE T2 
                              WHERE T1.ColA = T2.colA AND
                                    T2.colB < T1.colB AND
                                    T2.ColC > 0 
                              ORDER BY T2.COLB DESC
                              LIMIT 1
                             ), 0)
                 ELSE ColC
            END) as ColC
    FROM TABLE T1
    

    【讨论】:

    • 嗨戈登,我不能在子查询选择中使用 ORDER BY 函数,我收到错误消息“相关子查询不能有 TOP 或 ORDER BY:”
    • 您好团队,在这个问题上有什么帮助吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-01
    • 1970-01-01
    相关资源
    最近更新 更多