Bonjour,

Supposons que j'ai la table suivante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
------------------------------
id | actif | enregistrement
------------------------------
3  | O     | 2015-10-16
3  | O     | 2015-10-15
3  | N     | 2015-10-14
4  | N     | 2015-10-15
4  | O     | 2015-10-14
La requête que je veux faire doit faire un update sur la table ayant les conditions suivantes:
- l'id a une colonne actif = 'O' plus d'une fois
- parmi ces lignes ayant la colonne actif = 'O' plus d'une fois, mon update devra les changer en actif = 'N', sauf celle ayant la date d'enregistrement la plus récente, qui devra rester à 'O'.

Dans la table ci-dessus, l'id ayant plus d'une fois colonne actif = 'O' est le 3.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
------------------------------
id | actif | enregistrement
------------------------------
3  | O     | 2015-10-16
3  | O     | 2015-10-15
3  | N     | 2015-10-14
On doit mettre actif = 'N', sauf à la ligne ayant l'enregistrement le plus récent, qu'on doit laisser à 'O'. Dans notre exemple, on laissera donc la ligne ayant enregistrement = 2015-10-16.
J'ai essayé cette requête, mais il y a erreur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
update test as t1,
(select id
from test
where actif = 'O'
group by id
having count(*) > 1) as t2
set t1.actif = 'N'
where t1.enregistrement != max(t2.enregistrement);
Avez-vous une idée de la requête qu'il faut faire?
Merci!