-1
votes

Comment obtenir n lignes d'enregistrements de MySQL par iD iD desc

Supposons que j'ai une table comme celle-ci xxx

Comment puis-je écrire une requête MySQL pour rechercher les 10 derniers enregistrements pour chaque identifiant de trois identifiants (500, 501.502) par ID Desc < / p>


7 commentaires

Quelle version de mysql êtes-vous sur.


Qu'est-ce que tu as essayé jusque-là? Afficher les données d'entrée et le résultat attendu.


La colonne ID est-elle unique?


Qu'est-ce qui est le dernier ici, il n'y a pas d'ordre naturel dans une table SQL?


Les 10 derniers enregistrements de trois identifiants (500, 501.502) '- est ouvert à l'interprétation, vous voulez dire 10 pour chacun des 500 501 502, soit 30 ou 10 pour 500 501 502 combinés?


@ P.Salmon My MySQL Version est de 5,7 et j'ai besoin de 10 dernières lignes pour chaque identifiant donné.


@Mangeshautti ID colonne est incrémenté automatique


3 Réponses :


1
votes

En supposant que votre identifiant est une colonne d'incrément automatique et les trois ID (500, 501.502) sont destinés à user_id Ensuite, vous pouvez utiliser

 select  * 
 from my_table  
 where user_id in  (500, 501,502) 
 order by  id desc 
 limit 10 


0 commentaires

0
votes

Être un peu paresseux Voici un moyen d'obtenir les 2 derniers par user_id en utilisant une variable pour allouer un numéro de ligne jointe aux occurrences maximales par utilisateur

DROP TABLE IF EXISTS T;
CREATE TABLE T
(ID INT AUTO_INCREMENT PRIMARY KEY, USER_ID INT, RATING INT);
INSERT INTO T (USER_ID,RATING) VALUES
(500,1),
(502,1),
(500,2),(500,3),
(502,2),
(600,1);

SELECT U.*
FROM
(
SELECT S.ID,S.USER_ID,S.RATING,
         T.MAXROWS
FROM
(
SELECT ID,USER_ID,RATING,   
         IF(USER_ID <> @P,@R:=1,@R:=@R+1) RN,
         @P:=USER_ID
FROM T
ORDER BY USER_ID ASC,ID ASC
) S 
JOIN 
(SELECT USER_ID,COUNT(*) MAXROWS FROM T GROUP BY USER_ID) T ON T.USER_ID = S.USER_ID
) U
WHERE U.RATING > U.MAXROWS - 2 AND U.USER_ID IN(500,502);

 +----+---------+--------+---------+
| ID | USER_ID | RATING | MAXROWS |
+----+---------+--------+---------+
|  3 |     500 |      2 |       3 |
|  4 |     500 |      3 |       3 |
|  2 |     502 |      1 |       2 |
|  5 |     502 |      2 |       2 |
+----+---------+--------+---------+
4 rows in set (0.00 sec)


0 commentaires

0
votes

Vous pouvez utiliser Union tout opérateur pour obtenir 10 résultat de chaque identifiant xxx

vérifier ici pour Demo

Remarque: Reviewer est invité à améliorer ou à améliorer la requête.


1 commentaires

Cela donnera le résultat correct mais ce qui s'est passé si vous fournissez 500 ID? Je cherche une requête plus efficace