1
votes

Comment écrire une requête pour récupérer les enregistrements récents de la table de base de données

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

lien image

p >


1 commentaires

sélectionnez col1, col2 dans la commande nom_table par heure (col3)


4 Réponses :


0
votes

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).


3 commentaires

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.



0
votes

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 >


0 commentaires

1
votes

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.


1 commentaires

Merci pour votre réponse. Cela fonctionne bien lors de la récupération d'anciens enregistrements.



1
votes

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);


0 commentaires