Rumah  >  Soal Jawab  >  teks badan

Pembangunan back-end - Bagaimana untuk menulis pernyataan sql untuk statistik mysql mengikut segmen masa?

Struktur jadual pangkalan data saya adalah seperti berikut:

Medan ialah ID, NUM1, NUM2, TIME1, TIME2, MONEY.

Saya ingin mengira bilangan ID pada selang 15 minit. Kesannya adalah sama seperti pernyataan sql berikut.

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;

Tetapi terdapat banyak kod berulang seperti di atas, dan jika saya menukarnya kepada 30 minit, saya perlu membuat banyak perubahan, jadi saya meminta bantuan master SQL untuk melihat sama ada terdapat kaedah yang baik.

—————————————————————————————————————————————————— — ——————————————————————

Terima kasih Comrade arm atas bantuan anda, sekarang saya boleh bertanyakannya

kiraan (id) ialah bilangan orang yang memasuki stesen
Tetapi dalam beberapa tempoh masa, tiada orang yang memasuki stesen langsung, jadi tiada orang dalam beberapa tempoh masa, seperti 5:00 -- 5: 15
Jika anda ingin mengira bilangan orang yang tidak memasuki stesen Tempoh masa selesai hingga 0, apakah yang perlu saya lakukan?

黄舟黄舟2703 hari yang lalu942

membalas semua(3)saya akan balas

  • 我想大声告诉你

    我想大声告诉你2017-05-25 15:10:22

    Terima kasih atas jemputan, anda boleh susun secara menegak, seperti berikut

    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)
    

    Di mana untuk mengehadkan tempoh masa, bahagikannya mengikut selang masa yang anda perlukan dalam kumpulan mengikut.
    Saya tidak tahu mengapa anda mendapat ralat. Ia mungkin berkaitan dengan versi mysql adalah 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)

    Hasilnya

    Selepas diperiksa, ia berjalan agak laju, kurang daripada 0.3s

    balas
    0
  • 伊谢尔伦

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

    Bilangan lajur berubah, jadi banyak pembolehubah ditentukan

    balas
    0
  • 曾经蜡笔没有小新

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

    Skrip memacu MySQL dan menyesuaikan pembolehubah. Mungkin ada cara yang lebih baik, jadi saya menjawab dengan santai.

    balas
    0
  • Batalbalas