Date 按滚动天数分组的Bigquery

Date 按滚动天数分组的Bigquery,date,group-by,google-bigquery,Date,Group By,Google Bigquery,以下是我尝试按滚动周和上周分组的情况。我理解这个错误,但是当我按天分组时,最小值变成每行的最小值,因此不是集合的最小值 在Bigquery中,必须有一种简单的方法将日期分组在一起 select n_rtb_impressions, if(dayy between min(dayy) and (min(dayy) + 6) ,1, 0) as D from (SELECT ((dayofyear(datetime))) as dayy, sum(IF

以下是我尝试按滚动周和上周分组的情况。我理解这个错误,但是当我按天分组时,最小值变成每行的最小值,因此不是集合的最小值

在Bigquery中,必须有一种简单的方法将日期分组在一起

select
    n_rtb_impressions,
    if(dayy between min(dayy) and (min(dayy) + 6) ,1, 0) as D
from
    (SELECT
    ((dayofyear(datetime))) as dayy,
        sum(IF( c_priority IN (19,20,21), IFNULL(s_impressions,0)-IFNULL(hybrid_p_back,0), 0)) AS n_rtb_impressions,
        FROM
        TABLE_DATE_RANGE(hourly_stats.v1_,DATE_ADD(CURRENT_DATE(),-14,"day"),DATE_ADD(CURRENT_DATE(),-1,"day"))
        group by dayy)
使用下面的帮助进行编辑,然后进行一些变通。我设法将其扩展到多个维度,然后过滤出结果,使每组维度只有两行,一行用于1-7天的总和,另一行用于8-14天。然后,我使用第n个参数来透视数据,因此现在分组是维度。我会把它放在这里给其他人看:

select
server,
a_name,
w_name,
rtb_name,

NTH(1, last_7_days_n_rtb_impressions_1) This_week, NTH(2, last_7_days_n_rtb_impressions_1) Last_Week,

from(
    select
        [date],
        dw,
        server,
        a_name,
        w_name,
        rtb_name,
        last_7_days_n_rtb_impressions_1
    from(
        SELECT
            [date],
            dw,
            SUM(n_rtb_impressions) OVER(ORDER BY rtb_name, server, a_name, w_name,[date]
              ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS last_7_days_n_rtb_impressions_1,
            server,
            a_name,
            w_name,
            rtb_name,
        FROM (
          SELECT
              server,
              a_name,
              w_name,
              rtb_name,
              dayofweek(datetime) as dw,
              DATE(datetime) AS [date],
              SUM(IF( c_priority IN (19,20,21), IFNULL(s_impressions,0)-IFNULL(hybrid_p_back,0), 0)) AS n_rtb_impressions,

          FROM TABLE_DATE_RANGE(hourly_stats.v1_,DATE_ADD(CURRENT_DATE(),-14,"day"),
               DATE_ADD(CURRENT_DATE(),-1,"day"))

          GROUP BY [date],dw,server,
                 a_name,
                 w_name,
                 rtb_name,
          order by rtb_name,server, a_name,w_name, [date])

          order by rtb_name,server, a_name,w_name, )

          where dw = dayofweek(DATE_ADD(CURRENT_DATE(),-1,"day"))

          order by rtb_name,server, a_name,w_name, [date])

          group by
          server,
          a_name,
          w_name,
          rtb_name,

尽量接近你的例子

last_7_days_n_rtb_impressions_1
-如果您在一年中的天数没有任何间隔,则生成正确的输出。 即使在新年期间,它仍将持续7天

last_7_days_n_rtb_impressions_2
-即使一年中的天数有间隔,也能产生正确的输出。从0年开始。当然,这可以进一步调整以反映您的需求

希望这对你来说是个好的开始

有关更多详细信息,请参见的
窗框条款
部分

SELECT 
  [date], dayy, n_rtb_impressions, 
  SUM(n_rtb_impressions) OVER(ORDER BY [date] 
      ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS last_7_days_n_rtb_impressions_1,
  SUM(n_rtb_impressions) OVER(ORDER BY [date] 
      RANGE BETWEEN 6 PRECEDING AND CURRENT ROW) AS last_7_days_n_rtb_impressions_2  
FROM (
  SELECT
    DAYOFYEAR(datetime) AS dayy,
    DATE(datetime) AS [date],
    SUM(IF( c_priority IN (19,20,21), IFNULL(s_impressions,0)-IFNULL(hybrid_p_back,0), 0)) AS n_rtb_impressions,
  FROM TABLE_DATE_RANGE(hourly_stats.v1_,DATE_ADD(CURRENT_DATE(),-14,"day"),
        DATE_ADD(CURRENT_DATE(),-1,"day"))
  GROUP BY dayy, [date]
)
ORDER BY 1

谢谢你的帮助!我试图使缩进遵循标准惯例,但它可能不是100%正确。你能检查一下吗?我会的,但我的新工作使用oracle和sql server,所以不再使用bigquery。我感谢你的帮助!