J'ai une table de journal des transactions qui est mise à jour chaque fois qu'un enregistrement est mis à jour.Mise à jour d'une table impliquant une clause groupby tout en évitant les tables temporaires
autoid ID Date Source
1 1 2010-10-11 abc
2 2 2010-09-10 xyz
3 1 2010-08-03 pqr
4 1 2010-11-01 mno
Je peux obtenir la plus récente mise à jour pour chaque ID par la requête suivante (il est efficace, est-il?):
select * from mytable group by ID order by Date desc;
Maintenant, si j'ai une autre table qui devrait être mis à jour avec la date de transaction la plus récente, comment puis-je le faire sans créer de table temporaire?
La requête suivante est incorrecte, mais existe-t-il une alternative de requête imbriquée? Je ne veux pas créer de table temporaire.
update mytable a, othertable b
set b.date = a.date
where b.ID = a.ID group by ID order by Date desc;
La solution d'ajreal a fonctionné!
update othertable,
(select b.id, max(b.`date`) as latest from mytable b group by b.id) as b
set othertable.`date` = b.latest
where othertable.id=b.id
;
ajouter dans l'index sur ID + date devrait aider, sans connaître la taille de la table et u semble SELECT * illimitee ... est une sorte de ne pas efficace, l'instruction UPDATE est erronée en raison manque d'alias de table dans GROUP BY – ajreal
Cette table sur laquelle je travaille donne 700 lignes, d'où le nombre illimité. Donc un alias de table devrait faire un groupe par le travail dans la requête de mise à jour? Pourriez-vous s'il vous plaît dessiner un exemple de requête? Je reste généralement à l'écart des requêtes compliquées mais les tables temporaires sont quelque chose que je déteste! – ThinkCode