Hive LAG功能 - 年度变化 - 即使没有当前的vaue也能获得之前的值

时间:2016-11-18 11:49:41

标签: sql hadoop hive hiveql lag

我正在计算年度变化,以下是hive中的查询

    select Name, 
    Year, 
    Month, 
    ID,
    value as Current, 
    LAG(value,1,0) OVER(PARTITION BY name,month,id ORDER BY year ASC) as Previous, 
    value - LAG(value,1,0) OVER(PARTITION BY name,month,id ORDER BY year ASC) as Change

当前结果

    Name    Year    Month   ID  Current     Previous        Change
    A       2015    1       8320    944     0               944
    O       2015    1       8320    153     0               153
    O       2016    1       8320    133.92  153             -19.08
    B       2015    1       8320    572     0               572
    C       2016    1       8320    126     0               126

2016年有3个案例

  1. 名称O - 2016和2015都有两个值,我得到了差异
  2. 名称C - 仅在2016年有价值,我得到差异,将2015年保持为0
  3. 名称A和B - 仅在2015年而不是在2016年具有值 - 所以我需要分别获得两个条目,其中A和B分别为-944和-572。
  4. 我的预期结果是:

        Name    Year    Month   ID  Current     Previous        Change
        A       2015    1       8320    944     0               944
        A       2016    1       8320    0       944             -944
        O       2015    1       8320    153     0               153
        O       2016    1       8320    133.92  153             -19.08
        B       2015    1       8320    572     0               572
        B       2016    1       8320    0       572             -572
        C       2016    1       8320    126     0               126
    

    请指导我如何获得上一年的价值,即使没有当前的年份价值。谢谢你提前获得帮助。

0 个答案:

没有答案