Heim  >  Fragen und Antworten  >  Hauptteil

Back-End-Entwicklung – Wie schreibe ich SQL-Anweisungen für MySQL-Statistiken nach Zeitsegment?

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?

黄舟黄舟2703 Tage vor943

Antworte allen(3)Ich werde antworten

  • 我想大声告诉你

    我想大声告诉你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不到

    Antwort
    0
  • 伊谢尔伦

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

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

    Antwort
    0
  • 曾经蜡笔没有小新

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

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

    Antwort
    0
  • StornierenAntwort