繁体   English   中英

在 BigQuery 中,分组依据是日期 <= 表列中的每个唯一日期

[英]In BigQuery, group by where date is <= each unique date in table column

我们有示例数据t1 ,我们正在尝试从下面的查询中创建最终的 output,其中数据中每个唯一日期有 1 行

with
  t1 as (
    select '2022-12-01' as gameDate, 3 as stat1, 7 as stat2 union all
    select '2022-12-01' as gameDate, 2 as stat1, 5 as stat2 union all
    select '2022-12-01' as gameDate, 5 as stat1, 6 as stat2 union all
    select '2022-12-02' as gameDate, 3 as stat1, 8 as stat2 union all
    select '2022-12-02' as gameDate, 4 as stat1, 7 as stat2 union all
    select '2022-12-02' as gameDate, 2 as stat1, 8 as stat2 union all
    select '2022-12-02' as gameDate, 3 as stat1, 8 as stat2 union all
    select '2022-12-03' as gameDate, 1 as stat1, 6 as stat2 union all
    select '2022-12-03' as gameDate, 2 as stat1, 6 as stat2 union all
    select '2022-12-03' as gameDate, 3 as stat1, 8 as stat2 union all
    select '2022-12-03' as gameDate, 4 as stat1, 9 as stat2 union all
    select '2022-12-03' as gameDate, 4 as stat1, 5 as stat2 union all
    select '2022-12-04' as gameDate, 2 as stat1, 9 as stat2 union all
    select '2022-12-04' as gameDate, 1 as stat1, 7 as stat2 union all
    select '2022-12-04' as gameDate, 2 as stat1, 7 as stat2 union all
    select '2022-12-04' as gameDate, 1 as stat1, 5 as stat2 union all
    select '2022-12-04' as gameDate, 4 as stat1, 9 as stat2 union all
    select '2022-12-05' as gameDate, 3 as stat1, 8 as stat2 union all
    select '2022-12-05' as gameDate, 3 as stat1, 6 as stat2 union all
    select '2022-12-05' as gameDate, 4 as stat1, 6 as stat2 union all
    select '2022-12-06' as gameDate, 1 as stat1, 5 as stat2 union all
    select '2022-12-06' as gameDate, 3 as stat1, 7 as stat2
  ),

  data_stacked as (
    select '2022-12-01' as rowDate, * from t1 where gameDate <= '2022-12-01' union all 
    select '2022-12-02' as rowDate, * from t1 where gameDate <= '2022-12-02' union all 
    select '2022-12-03' as rowDate, * from t1 where gameDate <= '2022-12-03' union all 
    select '2022-12-04' as rowDate, * from t1 where gameDate <= '2022-12-04' union all 
    select '2022-12-05' as rowDate, * from t1 where gameDate <= '2022-12-05' union all 
    select '2022-12-06' as rowDate, * from t1 where gameDate <= '2022-12-06' 
  )

select
  rowDate,
  count(*) as ct,
  sum(stat1) as sumStat1,
  sum(stat2) as sumStat2
from data_stacked
group by 1 order by 1 asc

我们希望按<= each date进行分组,并在 groupby 内计算组内的 num 行和 stat1、stat2 的总和。 上面的示例在技术上是可行的,尽管它是通过硬编码日期实现的,因此不可扩展,不是一个很好的长期解决方案。

这里是否有一个 bigquery 解决方案可以从t1中找到不同的gameDate并使用这些 gameDate 来执行此 groupby?

使用以下方法

select
  gameDate,
  sum(count(*)) over(order by gameDate) as ct,
  sum(sum(stat1)) over(order by gameDate) as sumStat1,
  sum(sum(stat2)) over(order by gameDate) as sumStat2
from t1
group by 1 order by 1 asc               

如果应用于您问题中的样本数据 - output 是

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM