Répartition du tableau dans le temps

J'ai une table MySQL avec environ 3000 lignes par utilisateur. L'une des colonnes est un champ datetime, qui est modifiable, de sorte que les lignes ne sont pas dans l'ordre chronologique.

J'aimerais visualiser la distribution temporelle dans un graphique, j'ai donc besoin d'un certain nombre de points de données individuels. 20 points de données suffiraient.

Je pourrais faire ceci :

select timefield from entries where uid = ? order by timefield;

et regardez toutes les 150 lignes.

Ou je pourrais faire 20 requêtes distinctes et utiliser limit 1 et offset.

Mais il doit y avoir une solution plus efficace...

请先 登录 后评论

3 réponses

Michal Sznajder

Quelque chose comme ça m'est venu à l'esprit

select @rownum:=@rownum+1 rownum, entries.* 
from (select @rownum:=0) r, entries 
where uid = ? and rownum % 150 = 0

Je n'ai pas MySQL sous la main mais peut-être que cela aidera...

请先 登录 后评论
jason saldo
select timefield
from entries
where rand() = .01 --will return 1% of rows adjust as needed.

Je ne suis pas un expert mysql donc je ne sais pas comment rand() fonctionne dans cet environnement.

请先 登录 后评论
Bill Karwin

Michal Sznajder l'a presque compris, mais vous ne pouvez pas utiliser d'alias de colonne dans une clause WHERE en SQL. Vous devez donc l'envelopper dans une table dérivée. J'ai essayé ceci et il renvoie 20 lignes :

SELECT * FROM (
    SELECT @rownum:=@rownum+1 AS rownum, e.*
    FROM (SELECT @rownum := 0) r, entries e) AS e2
WHERE uid = ? AND rownum % 150 = 0;
请先 登录 后评论