Date 按滚动天数分组的Bigquery
以下是我尝试按滚动周和上周分组的情况。我理解这个错误,但是当我按天分组时,最小值变成每行的最小值,因此不是集合的最小值 在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
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。我感谢你的帮助!