簡體   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