首页 文章

计算SQL中不同日期之间sum()的差异

提问于
浏览
1

我有一个查询,其中我总结了一个列WHERE日期=昨天(current_date - 1)的值:

SELECT sum(col) as sumCol
from `project.dataset.table`
where date = date_sub(current_date, interval 1 day)

我想要实现的是计算上述结果与前一天相同查询结果之间的差异,即date = date_sub(current_date,interval 2 day)

我不知道如何在查询中创建此计算 . 我可以将上面的内容与前一天的相同查询结合起来,但显然每天给我一行而不是计算总和(col)间隔1天 - 间隔2天?

任何帮助将不胜感激,指出我正确的方向

谢谢

2 回答

  • 2

    你找到类似下面的东西吗?

    SELECT
        ( sum(col) as sumCol
        from `project.dataset.table`
        where date = date_sub(current_date, interval 1 day)
         )-( sum(col) as sumCol
        from `project.dataset.table`
        where date = date_sub(current_date, interval 2 day)
         ) from project.dataset.table
    
  • 0

    好吧,你可以使用条件聚合:

    select sum(case when date = date_sub(current_date, interval 1 day) then col else - col end) as diff
    from `project.dataset.table`
    where date in ( date_sub(current_date, interval 1 day), date_sub(current_date, interval 2 day) )
    

    编辑:

    更一般地说,您可以使用条件聚合获取这两个值:

    select sum(case when date = date_sub(current_date, interval 1 day) then col  end) as yesterday,
           sum(case when date = date_sub(current_date, interval 2 day) then col  end) as day_before
    from `project.dataset.table`
    where date in ( date_sub(current_date, interval 1 day), date_sub(current_date, interval 2 day) )
    

    然后,您可以根据需要组合这些列 . 如果缺少一个值,它将是 NULL ,因此您可以安全地进行除法和缺失值 .

相关问题