Supposons que j'ai une table comme celle-ci 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> p>
3 Réponses :
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
Ê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)
Vous pouvez utiliser Union tout opérateur pour obtenir 10 résultat de chaque identifiant vérifier ici pour Demo P> Remarque: strong> Reviewer est invité à améliorer ou à améliorer la requête. P> P>
Cela donnera le résultat correct mais ce qui s'est passé si vous fournissez 500 ID? Je cherche une requête plus efficace
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