0
votes

Fonction de fenêtre redshift pour le changement de colonne

J'ai une table redshift avec parmi d'autres choses un ID code> et plan_type CODE> Colonne et aimerait une clause de groupe de fonctions de fenêtre où le plan_type code> change de sorte que si ceci est la donnée par exemple:

SELECT * FROM
(
 SELECT 
    user_id, 
    plan_type, 
    created_at,
    lag(plan_type) OVER (PARTITION by user_id ORDER BY created_at) as prev_plan,
    row_number() OVER (PARTITION by user_id ORDER BY created_at) as rownum 
 FROM tablename
 WHERE plan_type IS NOT NULL
) userHistory 
WHERE
    userHistory.plan_type <> userHistory.prev_plan
    OR userHistory.rownum = 1
ORDER BY created_at;


1 commentaires

La dernière date est-elle une erreur?


3 Réponses :


0
votes

Utiliser Row_Number () code> Fonction de fenêtre

 select * from
    (select *,row_number()over(partition by user_id,plan_type order by created) rn
    ) a where a.rn=1


0 commentaires

1
votes

Ceci est un problème de lacunes et de îles. Je pense que lag () code> est l'approche la plus simple: xxx pré>

Ceci suppose que les types de plan peuvent revenir à une autre valeur et que vous voulez chacun. p>

Si non, utilisez simplement l'agrégation: P>

select user_id, plan_type, min(created)
from t
group by user_id, plan_type;


1 commentaires

Merci c'est génial. Cependant, étant donné que j'ai des ordures dans les données où la valeur est parfois nulle entre-temps, je devais modifier le lieu où les conditions sont un peu mais que votre solution est globalement exactement ce dont j'avais besoin! Merci!



0
votes

Utiliser lag () xxx


0 commentaires