Back-End-Entwicklung – Wie schreibe ich SQL-Anweisungen für MySQL-Statistiken nach Zeitsegment?
黄舟
黄舟 2017-05-25 15:08:22
0
3
978

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?

黄舟
黄舟

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

Antworte allen(3)
我想大声告诉你

谢邀,可以纵向排列的化,如下

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不到

伊谢尔伦

列数不定啊,真的定义不少变量

曾经蜡笔没有小新

脚本驱动MySQL ,定制一个变量。也许有更好的办法,我就闲的回答了下

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage