Maison > Questions et réponses > le corps du texte
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 ?
我想大声告诉你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
伊谢尔伦2017-05-25 15:10:22
Le nombre de colonnes est variable, donc de nombreuses variables sont définies
曾经蜡笔没有小新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.