recherche

Maison  >  Questions et réponses  >  le corps du texte

Développement back-end - Comment écrire des instructions SQL pour les statistiques MySQL par segment temporel ?

La structure de mes tables de base de données est la suivante :

Les champs sont ID, NUM1, NUM2, TIME1, TIME2, MONEY.

Je souhaite compter le nombre d'identifiants à intervalles de 15 minutes. L'effet est le même que celui de l'instruction SQL suivante.

SELECT  
  sum(CASE when TIME1 >= '2014-02-27 8:00:00' and TIME1 < '2014-02-27 8:15:00' then 1 else 0 end)   AS '1',  
  sum(CASE when TIME1 >= '2014-02-27 8:15:00' AND TIME1 < '2014-02-27 8:30:00' then 1 else 0 end)   AS '2',  
  sum(CASE when TIME1 >= '2014-02-27 8:30:00' AND TIME1 < '2014-02-27 8:45:00' then 1 else 0 end)   AS '3',  
  sum(CASE when TIME1 >= '2014-02-27 8:45:00' AND TIME1 < '2014-02-27 9:00:00' then 1 else 0 end)   AS '4',  
  sum(CASE when TIME1 >= '2014-02-27 9:00:00' and TIME1 < '2014-02-27 9:15:00' then 1 else 0 end)   AS '5'  
from dealdata;

Mais il y a beaucoup de code répétitif comme celui ci-dessus, et si je le change à 30 minutes, je devrai faire beaucoup de changements, j'ai donc demandé de l'aide au maître SQL pour voir s'il existe une bonne méthode.

————————————————————————————————————Ligne de démarcation——————————— — ——————————————————————

Merci camarade bras pour votre aide, maintenant je peux l'interroger

count (id) est le nombre de personnes qui sont entrées dans la station
Mais à certaines périodes, personne n'entre dans la station, donc il n'y a personne à certaines périodes, comme 17h00 - 17h00 : 15
Si vous souhaitez compter le nombre de personnes qui ne sont pas entrées dans la station Le délai est complété à 0, que dois-je faire ?

黄舟黄舟2790 Il y a quelques jours1011

répondre à tous(3)je répondrai

  • 我想大声告诉你

    我想大声告诉你2017-05-25 15:10:22

    Merci pour l'invitation, vous pouvez la disposer verticalement, comme suit

    SELECT count(id)
    from dealdata
    where timestampdiff(minute,'2014-02-27 9:15:00',`TIME1`)<0 and timestampdiff(minute,'2014-02-27 8:00:00',`TIME1`)>=0
    group by floor(timestampdiff(minute,'2014-02-27 8:00:00',`TIME1`)/15)
    

    Où limiter la période de temps, divisez-la par l'intervalle de temps dont vous avez besoin en groupe.
    Je ne sais pas pourquoi vous avez une erreur. Cela peut être lié à la version de MySQL. La mienne est MySQL5.6

    .
    SELECT count(*),
    floor(timestampdiff(minute,'2017-1-18 16:00:00',`time`)/30),
    date_add('2017-1-18 16:00:00',interval 30*floor(timestampdiff(minute,'2017-1-18 16:00:00',`time`)/30) MINUTE)
    FROM 我是马赛克.我是马赛克
    group by floor(timestampdiff(minute,'2017-1-18 16:00:00',`time`)/30)

    Le résultat

    Après l'avoir vérifié, il a fonctionné assez vite, moins de 0,3 s

    répondre
    0
  • 伊谢尔伦

    伊谢尔伦2017-05-25 15:10:22

    Le nombre de colonnes est variable, donc de nombreuses variables sont définies

    répondre
    0
  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-05-25 15:10:22

    Script pilote MySQL et personnalise une variable. Il existe peut-être un meilleur moyen, alors j'ai répondu avec désinvolture.

    répondre
    0
  • Annulerrépondre