Bonjour,
Je tombe sur une requête qui est trop complexe pour moi.
J'ai un 3 table liées de cette façon :
La requête ci-dessus compte le nombre de batch (sym_outgoing_batch) de type 'R' dont le status est !='OK', par node_id.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 select ob.node_id, d.table_name, count(*) from sym_outgoing_batch ob left join sym_data_event de on de.batch_id=ob.batch_id left join sym_data d on d.data_id=de.data_id where ob.status != 'OK' and d.event_type='R' group by ob.node_id, d.table_name
Je voudrais mette à jours le status de tous les batch sauf le plus récent par node_id et table_name. La table sym_outgoing_batch contient le champs last_update_time pour les trier par date
Par exemple, s'il y a 10 lignes pour le node_id=0001 et la table='ma_table', alors je voudrais changer leur statut à 'OK' sauf pour la plus récente de ces 10 lignes.
La requête suivante récupère la date du batch le plus récent pour chaque couple node_id/table_name, mais je ne n'arrive à récupérer son identifiant batch_id.
Je voudrais arriver à quelque du genre :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 select ob.node_id, d.table_name, max(ob.last_update_time) from sym_outgoing_batch ob left join sym_data_event de on de.batch_id=ob.batch_id left join sym_data d on d.data_id=de.data_id where ob.status!='OK' and d.event_type='R' group by ob.node_id, d.table_name
(je ne suis pas certain non plus de ma requête d'update avec jointure ci-dessus, c'était plus pour exprimer ce à quoi je voulais parvenir)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 update sym_outgoing_batch ob set status='OK' from sym_data_event de left join sym_data d on d.data_id=de.data_id where de.batch_id=ob.batch_id and ob.status!='OK' and d.event_type='R' and ob.batch_id not in (Liste des batch_id les plus récent par node_id/table_name)
Merci par avance.
Partager