30 Nisan 2025 - 14:20
MySQL Tarihe Göre Kayıt Adetleri Görseli
Veritabanları

MySQL Tarihe Göre Kayıt Adetleri

Yorumlar

Merhabalar. Kullanılan bir sistemde raporlara 2 adet yeni sayfa eklenmesi istendi. Bunlardan biri günlük olarak kayıt edilen mesaj adeti, diğeri ise istenilen tarihteki saatlik kayıt edilen mesaj adetinin gösterimi. PHP ile yapılacak ama önce SQL sorgusunu yazacaz ki gösterelim. Bu adet verileri herhangi bir yere yazılmadığından ana tablodan sql sorgusu ile çekmeliyiz. İlerde sizlere de gerekebilir diyerek SQL kodlarını paylaşayım.

Veritabanımız: MySQL 5.X
Tablomuz: ChatMaster
Tarih Sütunu: start_date
Kötü Durum: start_date sütunundaki veriler tarih saat şeklinde (Yani; 2018-09-01 12:34:56 gibi)

Önce 1 Eylül 2018 sonrası oluşan kayıtları gün bazlı çekeceğiz. Bu günlük adet verisini verecek.

GENEL
SELECT DATE(start_date) TARIH, COUNT(*) ADET FROM ChatMaster 
WHERE start_date>='2018-09-01 00:00:00' 
GROUP BY DATE(start_date)

Peki burdaki sorgu nedir? Bana tarih bazlı veri gerektiğinden SELECT içerisinde DATE(start_date) diyerek start_date sütunundaki verilerden sadece tarih kısmıyla ilgilendiğimi söyledim ve TARIH ismine atadım (İsterseniz siz araya as yazabilirsiniz). Daha sonra saymak için COUNT kullandım. Burdaki şartım 1 Eylül 2018 00:00:00 ve sonraki kayıtlarla işlem yapmak gerektiğinden WHERE ile bu şartı sağladım. GROUP BY ile de gruplandırma yaptım ki hepsini sayıp ilk tarihin içine toplamını yazmasın. Sonuç:

TARIH ADET  
2018-09-01 201  
2018-09-02 127  
2018-09-03 571  
2018-09-04 423  
2018-09-05 454  
2018-09-06 370  
2018-09-07 349  
2018-09-08 190  
2018-09-09 162  
2018-09-10 537  
2018-09-11 476  
2018-09-12 79  

Peki GROUP BY kullanmasaydım sonuç ne olurdu? Aşağıdaki gibi olacaktı.

TARIH ADET  
2018-09-01 3939  

Buraya kadar her şey tamam. Peki saat bazlı bir önceki günün verisini nasıl alacağız? Önceki sorguyu zaten biliyoruz. Bu sorguyu saat bazlı hale getirelim. DATE gördüğümüz her yere HOUR yazmamız yeterli olacaktır.

GENEL
SELECT HOUR(start_date) SAAT, COUNT(*) ADET FROM ChatMaster
WHERE start_date>='2018-09-11 00:00:00' AND start_date<='2018-09-11 23:59:59'
GROUP BY HOUR(start_date)
SAAT ADET  
0 5  
1 9  
2 7  
3 3  
4 1  
5 2  
6 1  
7 5  
8 7  
9 25  
10 23  
11 51  
12 31  
13 45  
14 56  
15 32  
16 51  
17 31  
18 14  
19 19  
20 16  
21 21  
22 5  
23 16  

Tablo acayip gözüktü. Tabii gözüme hoş gelmedi. Önce kendin beğeneceksin :) Hadi gelin CONCAT ile güzelleştirelim.

GENEL
SELECT CONCAT(HOUR(start_date), ':00 - ', CONCAT(HOUR(start_date), ':59')) SAAT,
       COUNT(*) ADET
FROM ChatMaster
WHERE start_date>='2018-09-11 00:00:00' AND start_date<='2018-09-11 23:59:59'
GROUP BY HOUR(start_date)

Sonuca bakın ne güzel oldu?

SAAT ADET  
0:00 - 0:59 5  
1:00 - 1:59 9  
2:00 - 2:59 7  
3:00 - 3:59 3  
4:00 - 4:59 1  
5:00 - 5:59 2  
6:00 - 6:59 1  
7:00 - 7:59 5  
8:00 - 8:59 7  
9:00 - 9:59 25  
10:00 - 10:59 23  
11:00 - 11:59 51  
12:00 - 12:59 31  
13:00 - 13:59 45  
14:00 - 14:59 56  
15:00 - 15:59 32  
16:00 - 16:59 51  
17:00 - 17:59 31  
18:00 - 18:59 14  
19:00 - 19:59 19  
20:00 - 20:59 16  
21:00 - 21:59 21  
22:00 - 22:59 5  
23:00 - 23:59 16  

Gerisi zaten basit. Bu SQL sorgusunu al, PHP kodunun içinde kullan.

Hoşçakalın.

Benzer Yazılar

Yorumlar ()

Henüz yorum yok. İlk yorum yapan sen ol!

Yorum Yap