J'ai créé une table, c'est-à-dire table_1 qui a différents champs. Je souhaite écrire une requête pour récupérer les derniers enregistrements de la colonne part_name1 avec issue_priority en fonction de l ' heure . La colonne part_name1 peut contenir le même enregistrement avec des priorités différentes comme p1 , p2 ou p3 . Ici, j'ai pris moins d'enregistrements, mais si j'ai n nombre d'enregistrements, comment récupérer le dernier parmi les enregistrements insérés. Veuillez consulter le lien d'image donné
blower p2 reverse p3
Sortie: À partir du tableau ci-dessus, je veux que la sortie soit comme mentionné ci-dessous
**part_name1** **issue_priority** **time1**
blower p1 03:15:00
reverse p2 03:16:18
blower p2 04:11:30
reverse p3 04:44:05
p >
4 Réponses :
Il vous suffit d'utiliser ORDER BY:
SELECT fields FROM table ORDER BY time1 DESC LIMIT 2;
Dans votre cas, les champs sont part_name1, table est le nom de votre table et LIMIT 2 est parce que vous voulez exactement les 2 derniers enregistrements ( peut être réglé sur n'importe quel nombre).
ici, l'heure n'est pas au format d'horodatage, vous devez donc convertir la colonne de temps en horodatage lors de la récupération des données, cela pourrait être la bonne manière! qu'en penses-tu?
@ alexandru.tapirdea Merci pour votre réponse. Existe-t-il un autre moyen sans utiliser de limite. Parce que parfois je ne sais pas combien il y a d'enregistrements. Veuillez vérifier le lien d'image donné.
@AamnaD le moyen le plus simple est de supprimer LIMIT 2. Cela signifie que vous recevrez toujours tous les événements, classés par time1. Après cela, vous pouvez décider du backend combien d'entre eux vous souhaitez afficher.
Vous pouvez utiliser ORDER BY :
SELECT part_name1, issue_priority FROM table_1 ORDER BY time1 DESC LIMIT 2
La limite 2 vous donnera les deux enregistrements les plus récents. Si vous supprimez la LIMITE, vous obtiendrez tous les enregistrements classés par heure1 du plus récent au plus ancien.
https://dev.mysql.com/doc/refman/8.0/en/order-by-optimization.html
p >
Tout d'abord, vous devez rechercher la dernière heure pour chaque part_name1. Cela vous donne les valeurs de temps maximales.
SELECT t1.*
FROM table_1 t1
JOIN (
SELECT part_name1, max(time1) as maxtime1
FROM table_1
GROUP BY part_name1 ) s1
ON (t1.part_name1 = s1.part_name1 AND t1.time1 = s1.maxtime1);
Si vous avez également besoin des autres données de la table (par exemple issue_priority), vous devez utiliser ce qui précède comme sous-requête:
SELECT part_name1, max(time1) as maxtime1 FROM table_1 GROUP BY part_name1;
Cela vous renverra la dernière ligne pour chaque part_name1. Vous pouvez ajouter une clause LIMIT supplémentaire, si vous le souhaitez.
Merci pour votre réponse. Cela fonctionne bien lors de la récupération d'anciens enregistrements.
Utilisez max (time1) au lieu de min (time1) pour récupérer les derniers enregistrements insérés.
SELECT t1.* FROM table_1 t1 JOIN ( SELECT part_name1, max(time1) as maxtime1 FROM table_1 GROUP BY part_name1 ) s1 ON (t1.part_name1 = s1.part_name1 AND t1.time1 = s1.maxtime1);
sélectionnez col1, col2 dans la commande nom_table par heure (col3)