1

私はBigQueryの中#standardsqlを使用して1として各CUSTOMER_IDのmaksimumランキングをコーディングしようとしていますのための行の数、およびそれの残りの部分は、これまでデコード最大SQL

クエリ結果

この0をされています

rankings customer_id

ランク付けするためのクエリは、私がNE何この

ROW_NUMBER() OVER(PARTITION BY customer_id ORDER BY booking_date Asc) as ranking 

ですedは私たちがあなたをラップすることができますすぐ下の表のように0として

enter image description here

おかげ

答えて

1

を割り当てるあなたが複数の行を持っているので、あなたのランキングは、不安定です同じキー値でいずれにせよ、あなたはまだちょうどcaseを使用して、サブクエリなしであなたがやりたいことができます。

select t.*, 
     row_number() over (partition by customer_id order by booking_date asc) as ranking, 
     (case when row_number() over (partition by customer_id order by booking_date asc) = 
        count(*) over (partition by customer_id) 
      then 1 else 0 
     end) as custom_coded 
from t; 

本質的に同じことをやって、より伝統的な方法は、降順の並べ替えを使用することです:

select t.*, 
     row_number() over (partition by customer_id order by booking_date asc) as ranking, 
     (case when row_number() over (partition by customer_id order by booking_date desc) = 1 
      then 1 else 0 
     end) as custom_coded 
from t; 
+0

上記を試してみてください、そして両方の作品、ありがとう! – user3292755

1

を、それは1として、各customeridの最大順位をデコードし、このような別の列、およびそれ以下の番号を作成することです顧客別のパーティションを持つ解析関数としてMAXを使用して、rankingの各値と各顧客の最大rankingの値を比較します。 ranking値は、顧客の最大値と等しい場合、我々はcustom_codedのために1を割り当て、そうでない場合、我々はあなたのサンプルデータに基づいて、0

SELECT 
    customer_id, item_bought, booking_date, ranking, 
    CASE WHEN ranking = MAX(ranking) OVER (PARTITION BY customer_id) 
     THEN 1 ELSE 0 END AS custom_coded 
FROM 
(
    SELECT customer_id, item_bought, booking_date, 
     ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY booking_date) ranking 
    FROM yourTable 
) t; 
+0

THX入力のために@ tim-biegelsen – user3292755