2016-04-12 6 views
1

ここは、週と先週のグループ分けの試みです。私はエラーを理解していますが、1日ごとにグループ化すると最小値は各行の最小値になり、最小値にはなりません。ビッグクエリー(Rollquest)によるグループ分け

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) 

EDITこのような寸法の各グループは2行のみ、合計1-7日間1と1を持っていること8〜14日間。その後、NTHを使用してデータをピボットし、グループ分けが現在の次元になった。私は他人のためにそれをここに入れます:

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, 
+0

ためWindow functionswindow-frame-clauseセクションを参照してくださいするために良いスタートです

ホープ私は、インデントが標準規則に従う作ってみました、あなたのニーズを反映するように調整することができます100%正しいとは限りません。それを確認できますか? –

+0

私は新しい仕事でOracleとSQL Serverを使用していますので、もうbigqueryにはありません。私はあなたの助けに感謝します! –

答えて

1

が可能

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 
+0

助けてくれてありがとう! –

関連する問題