Rumah > Soal Jawab > teks badan
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?
我想大声告诉你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
曾经蜡笔没有小新2017-05-25 15:10:22
Skrip memacu MySQL dan menyesuaikan pembolehubah. Mungkin ada cara yang lebih baik, jadi saya menjawab dengan santai.