2017-08-21 1 views
1

J'ai une table comme ci-dessous.Comment fusionner les deux derniers événements en une seule ligne

date   id event  keyword val  pattern_id() 
2017-08-01 001 triggerX abc  (null) 1 
2017-08-01 001 triggerY (null)  3  1 
2017-08-01 009 triggerX cde  (null) 2 
2017-08-01 010 triggerX ghi  (null) 3 
2017-08-01 010 triggerX ghi  (null) 3 
2017-08-01 010 triggerX ghi  (null) 3 
2017-08-01 010 triggerY (null)  1  3 
(list continues..) 

Le déclencheur d'événement sera suivi de triggerY (et non l'inverse). Il y a une chance où il n'y a que triggerX (pas de triggerY) comme id 009. Cependant, il n'y a pas de chance unique.

Ce que je voudrais faire est de suivre.

Par exemple de id 001, je voudrais fusionner la colonne de mot-clé triggerX et la colonne triggerYval en une ligne.

Par exemple de l'id 010. Il a quatre événements, mais j'ai juste besoin des deux derniers événements (dernier triggerX et Y) et fusionner la colonne de mot-clé et val. Cela me donnera ci-dessous.

date  id keyword val 
2017-08-01 001 abc  3 
2017-08-01 010 ghi  1 

Pourriez-vous m'aider à comprendre comment construire SQL pour obtenir le résultat comme ci-dessus?

+0

J'ai supprimé les balises de base de données incompatibles. MySQL <> Vertica. Veuillez marquer avec la base de données que vous utilisez vraiment. –

Répondre

1

Je pense que cela fait ce que vous voulez:

select date_id, id, max(event), max(keyword) 
from t 
where keyword in ('triggerX', 'triggerY') 
group by date_id, id 
having count(distinct keyword) = 2;