を割り当てるあなたが複数の行を持っているので、あなたのランキングは、不安定です同じキー値でいずれにせよ、あなたはまだちょうど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;
上記を試してみてください、そして両方の作品、ありがとう! – user3292755