【问题标题】:Get Difference between 2 fields using SQL使用 SQL 获取 2 个字段之间的差异
【发布时间】:2020-08-12 21:40:06
【问题描述】:

亲爱的,我有一张这样的桌子:

day            Cases
29/04/2020      1123
28/04/2020      1090
27/04/2020      908

我想获取过去 2 天的病例数之间的差异。

【问题讨论】:

    标签: sql oracle date select


    【解决方案1】:

    LAG() 函数根据指定的排序条件生成前一行的值。

    你可以如下图使用:

    select t.*, cases - lag(cases) over(order by day) as diff from t
    

    【讨论】:

    • 如果 OP 只关心最后两天,请将其放在 where 子句中 - 如果确实只需要两行以上的 lag() ,那么在整个表中计算 lag() 毫无意义。跨度>
    【解决方案2】:

    我想获取过去 2 天的病例数之间的差异

    您可以使用窗口函数和聚合:

    select 
        max(case when rn = 1 then cases end) 
            - max(case when rn = 2 then cases end) case_diff
    from (
        select cases, row_number() over(order by day desc) rn
        from mytable
    ) t
    where rn <= 2
    

    在子查询中,row_number() 按降序排列行day;然后外部查询过滤最后两行,并使用条件表达式获取cases 的最后一个值与上一个值之间的差异。

    【讨论】:

      【解决方案3】:

      你可以使用:

      select t.cases - tprev.cases
      from t join
           t tprev
           on t.day = trunc(sysdate) and tprev.day = trunc(sysdate - 1);
      

      如果您在(day) 上有索引,您可能会对性能印象深刻。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多