如何解决Bigquery-如何计算两个连续行的总和
例如,如何获得两行的总和,如果我总共有5行,那么我应该得到3行。
下面是我的桌子:
2020-08-01 1
2020-08-02 3
2020-08-03 4
2020-08-04 2
2020-08-05 4
我要实现这一目标:
4
6
4
August 1 and 2 = 4
August 3 and 4 = 6
August 5 = 4
解决方法
您可以在此处使用ROW_NUMBER
WITH cte AS (
SELECT dt,val,ROW_NUMBER() OVER (ORDER BY dt) rn
FROM yourTable
)
SELECT SUM(val)
FROM cte
GROUP BY FLOOR((rn - 1) / 2)
GROUP BY MIN(dt);
这是一个演示链接,显示在SQL Server中,但其逻辑也应适用于BigQuery:
Demo
,
以下是用于Bigquery标准SQL
#standardSQL
SELECT SUM(value) AS value,STRING_AGG(FORMAT_DATE('%B %d',day),' and ') || ' = ' || CAST(SUM(value) AS STRING) AS calc
FROM (
SELECT day,value,DIV(ROW_NUMBER() OVER(ORDER BY day) - 1,2) grp
FROM `project.dataset.table` t
)
GROUP BY grp
ORDER BY grp
您可以使用问题中的示例数据来测试,玩转上面的示例
#standardSQL
WITH `project.dataset.table` AS (
SELECT DATE '2020-08-01' day,1 value UNION ALL
SELECT '2020-08-02',3 UNION ALL
SELECT '2020-08-03',4 UNION ALL
SELECT '2020-08-04',2 UNION ALL
SELECT '2020-08-05',4
)
SELECT SUM(value) AS value,2) grp
FROM `project.dataset.table` t
)
GROUP BY grp
ORDER BY grp
有输出
Row value calc
1 4 August 01 and August 02 = 4
2 6 August 03 and August 04 = 6
3 4 August 05 = 4
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。