Comment éviter le regroupement sur des colonnes spécifiques
P粉667649253
2023-07-25 14:08:22
<p>J'ai un tableau de données sur les rendez-vous et lorsque les données associées sont mises à jour, chaque rendez-vous peut avoir plusieurs lignes de données. Je souhaite sélectionner le dernier enregistrement de chaque rendez-vous pour obtenir le dernier instantané de chaque rendez-vous. </p><p>Dans le code ci-joint, je suis obligé de regrouper par close_pallets et close_units, ce qui affecte ce que je vois (c'est-à-dire plusieurs lignes renvoyées par rendez-vous). Je souhaite regrouper uniquement par a.appointment_id pour obtenir une ligne par rendez-vous. Que dois-je faire ?</p><p><br /></p>
<pre class="brush:php;toolbar:false;">SELECT
MAX(numéro_version_enregistrement_rendez-vous),
rendez-vous_id,
nomination_pallets AS close_pallets,
nomination_units AS close_units
DEPUIS
b.dh
OÙ
last_updated_datetime ENTRE '2023-06-01' ET '2023-06-30'
ET id_entrepôt = 'xxx'
PAR GROUPE
rendez-vous_id,
close_pallets,
close_units</pre>
<p><br /></p>
Vous devrez utiliser une sous-requête pour y parvenir. En fait, vous devez obtenir la version maximale enregistrée de chaque identifiant de rendez-vous :
Vous pouvez également utiliser une instruction JOIN pour sélectionner la valeur maximale, ce qui est parfois plus rapide :
En fonction de votre cas d'utilisation, surtout si votre base de données est volumineuse, vous pouvez utiliser des sous-requêtes ou des index supplémentaires pour optimiser davantage la requête, mais c'est déjà assez rapide.