Heim > Fragen und Antworten > Hauptteil
Meine Datenbanktabellenstruktur ist wie folgt:
Die Felder sind ID, NUM1, NUM2, ZEIT1, ZEIT2, GELD.
Ich möchte die Anzahl der IDs im Abstand von 15 Minuten zählen. Der Effekt ist der gleiche wie bei der folgenden SQL-Anweisung.
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;
Aber es gibt viel sich wiederholenden Code wie den oben genannten, und wenn ich ihn auf 30 Minuten ändere, muss ich viele Änderungen vornehmen, deshalb habe ich den SQL-Master um Hilfe gebeten, um herauszufinden, ob es eine gute Methode gibt.
————————————————————————————————————Trennlinie——————————— — ————————————————————————
Vielen Dank, Genosse Arm, für Ihre Hilfe, jetzt kann ich es abfragen
Anzahl (ID) ist die Anzahl der Personen, die den Bahnhof betreten haben.
Aber in manchen Zeiträumen betreten überhaupt keine Menschen den Bahnhof, daher gibt es in manchen Zeiträumen, wie zum Beispiel von 17:00 bis 17:00 Uhr, keine Menschen: 15
Wenn Sie die Anzahl der Personen zählen möchten, die die Station nicht betreten haben. Der Zeitraum ist auf 0 abgelaufen. Was soll ich tun?
我想大声告诉你2017-05-25 15:10:22
谢邀,可以纵向排列的化,如下
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)
where 限制时间段,group by里面除以你需要的时间间隔。
我不知道你为什么出错,可能和mysql版本有关,我是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)
结果
看了下,跑的还是蛮快的,0.3s不到