Développement back-end - Comment écrire des instructions SQL pour les statistiques MySQL par segment temporel ?
黄舟
黄舟 2017-05-25 15:08:22
0
3
1008

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 ?

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

répondre à tous(3)
我想大声告诉你

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

伊谢尔伦

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

曾经蜡笔没有小新

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

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal