Google bigquery Bigquery-如何计算两个连续行的总和

Google bigquery Bigquery-如何计算两个连续行的总和,google-bigquery,Google 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 您可以在此处使用ROW\u NUMBER: WITH cte AS ( SELECT dt, val, ROW_NUMBER() OVER (ORDER BY dt) rn FROM yourTable ) SELECT SUM(v

我怎样才能得到两行的总和?例如,如果我总共有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

您可以在此处使用
ROW\u 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:


您可以在此处使用
行号

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:


下面是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, 
  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    
有输出

Row value   calc     
1   4       August 01 and August 02 = 4  
2   6       August 03 and August 04 = 6  
3   4       August 05 = 4    

下面是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, 
  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    
有输出

Row value   calc     
1   4       August 01 and August 02 = 4  
2   6       August 03 and August 04 = 6  
3   4       August 05 = 4    

谢谢你的快速回复。没有在bigquery@Tim中工作。给相同的5行赋值。i、 e.1 3 4 24@ShivamChauhan我怀疑这可能发生。尝试按我在上面使用的表达式的楼层进行聚合。这应该可以解决大查询中的问题。感谢您的快速响应。没有在bigquery@Tim中工作。给相同的5行赋值。i、 e.1 3 4 24@ShivamChauhan我怀疑这可能发生。尝试按我在上面使用的表达式的楼层进行聚合。这应该可以解决大查询中的问题。