Pembangunan back-end - Bagaimana untuk menulis pernyataan sql untuk statistik mysql mengikut segmen masa?
黄舟
黄舟 2017-05-25 15:08:22
0
3
996

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?

黄舟
黄舟

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

membalas semua(3)
我想大声告诉你

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

伊谢尔伦

Bilangan lajur berubah, jadi banyak pembolehubah ditentukan

曾经蜡笔没有小新

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

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan