79 votes

Comment choisissez-vous chaque n-ième ligne de mysql

J'ai une série de valeurs dans une base de données que j'ai besoin de tirer à la création d'une ligne graphique. Parce que je n'ai pas besoin d'une haute résolution, je voudrais ré-échantillonner les données en sélectionnant tous les 5 ligne à partir de la base de données.

86voto

Taylor Leese Points 18895
SELECT * 
FROM ( 
    SELECT 
        @row := @row +1 AS rownum, [column name] 
    FROM ( 
        SELECT @row :=0) r, [table name] 
    ) ranked 
WHERE rownum % [n] = 1 

57voto

Owen Points 5680

Vous pouvez essayer de mod 5 pour obtenir les lignes où l'ID est multiple de 5. (En supposant que vous avez une sorte de colonne ID qui est séquentiel.)

select * from table where table.id mod 5 = 0;

24voto

Bill Karwin Points 204877

Puisque vous avez dit que vous utilisez MySQL, vous pouvez utiliser les variables utilisateur pour créer un continue la numérotation des lignes. Vous n'avez qu'à mettre ça dans une table dérivée (sous-requête) si.

SET @x := 0;
SELECT *
FROM (SELECT (@x:=@x+1) AS x, * FROM mytable ORDER BY RAND()) t
WHERE x MOD 5 = 0;

J'ai ajouté ORDER BY RAND() pour obtenir un pseudo-aléatoires d'échantillonnage, au lieu de permettre à chaque cinquième ligne de la table non ordonnée d'être dans l'échantillon à chaque fois.

2voto

Mark Richards Points 81

J'avais été à la recherche de quelque chose comme cela. La réponse de Taylor et Bill m'a conduit à améliorer leurs idées.

tableau data1 a des champs read_date, valeur nous voulons sélectionner tous les 2d enregistrement à partir d'une requête limitée par un read_date gamme le nom de la table dérivée est arbitraire et est appelé ici DT

requête:

 SET @row := 0;
  SELECT * FROM  ( SELECT @row := @row +1 AS rownum, read_date, value  FROM data1  
  WHERE  read_date>= 1279771200 AND read_date <= 1281844740 ) as DT WHERE MOD(rownum,2)=0

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X