Regrouper tous les tuples d'une table par 2 colonnes et les modifier sauf le plus récent
Bonjour,
Je tombe sur une requête qui est trop complexe pour moi.
J'ai un 3 table liées de cette façon :
Code:
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 |
La requête ci-dessus compte le nombre de batch (sym_outgoing_batch) de type 'R' dont le status est !='OK', par node_id.
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.
Code:
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 voudrais arriver à quelque du genre :
Code:
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) |
(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)
Merci par avance.