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

Posted

技术标签:

【中文标题】在 SQL 中计算不同日期之间 sum() 的差异【英文标题】:Calculating the difference in sum() between different days in SQL 【发布时间】:2018-10-03 14:56:32 【问题描述】:

我有一个查询,我在其中对日期 = 昨天 (current_date - 1) 的列中的值求和:

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

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

我不确定如何在查询中创建此计算。我可以将上述内容与前一天的相同查询结合起来,但显然这给了我每天的一行,而不是计算 sum(col) 间隔 1 天 - 间隔 2 天?

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

谢谢

【问题讨论】:

【参考方案1】:

嗯,你可以使用条件聚合:

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,因此您可以安全地进行除法和缺失值。

【讨论】:

谢谢,这很有用。我试图用它来获得 % 变化,但我得到了 divide/0 错误:SUM(CASE WHEN date = DATE_SUB(current_date, INTERVAL 1 day) THEN col ELSE - col END / Clicks * 100) AS diff, @Arron 。 . .您需要指定当一天的值为 0 时要执行的操作。 只有一天,还是任何一行?因为我正在汇总最新级别 谢谢,编辑后的查询完美运行,我可以在计算中组合列而不会出错。【参考方案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

【讨论】:

以上是关于在 SQL 中计算不同日期之间 sum() 的差异的主要内容,如果未能解决你的问题,请参考以下文章

计算 Oracle SQL 中 2 个日期/时间之间的差异

如何使用 SQL 获取 2 列之间日期差异的计数(值的分布)?

计算特定年份的sql中的日期差异

PySpark SQL 中的日期之间的差异

如何计算两个日期之间的差异

SQL,在计算两次之间的差异时插入表