2016-03-24 19 views
0

Aşağıdaki MySQL sorgusu vardır: Ben olsunMySQL için doğru verileri döndürmez <= operatörü

select date(JoinTime), count(UniqueCallID) from Call2 where JoinTime >= '2016-03-10' and JoinTime <= '2016-03-15' group by day(JoinTime); 

ve sonucudur:

| date(JoinTime) | count(distinct UniqueCallID) | 
+----------------+------------------------------+ 
| 2016-03-10  |       20 | 
| 2016-03-11  |       29 | 
| 2016-03-12  |       2 | 
| 2016-03-13  |       5 | 
| 2016-03-14  |       12 | 

Gördüğünüz gibi o dönmedi veri 2016-03-15 için, 2016-03-15 dahil etmek istediğim gibi >= operatörünü açıkça ayarladığım halde.

Ben de böyle ARASINDAKİ ile denedim:

select date(JoinTime), count(UniqueCallID) from Call2 where JoinTime between '2016-03-10' and '2016-03-15' group by day(JoinTime); 

ve sonuç aynıydı.

Bu neden oluyor? Ve bunu düzeltmek için ne yapabilirim?

+0

"JoinTime" hangi veri türüdür? – arootbeer

+0

Bu bir tarihtir. – Galil

+0

Neden DATE() 'işlevini kullanıyorsunuz? – Alex

cevap

4

sadece tarihlerine karşılaştırarak olduğundan, size yıl, ay ve gün geçtikçe grup gerektiği, birkaç ay alakalı olabileceği gibi

select date(JoinTime), count(UniqueCallID) 
from Call2 where date(JoinTime) between '2016-03-10' and '2016-03-15' 
group by day(JoinTime); 

Ayrıca, ilk bir tarihe JoinTime CAST gerekir:

select date(JoinTime), count(UniqueCallID) 
from Call2 where date(JoinTime) between '2016-03-10' and '2016-03-15'  
group by year(JoinTime), month(JoinTime), day(JoinTime); 

bunu kullanırken yolu,

2016-03-15 12:21:32 
gibi bir giriş o <= koşulla eşleşmiyor olarak

2016-03-15 00:00:00 

yüzden dahil edilmeyecektir karşı kontrol edilecektir.

3

Eğer JoinTime DateTime türündeyse ve bir 'zaman' parçası sağlamazsanız, MySql zamanınızın gece yarısı olduğunu varsayar ('2016-03-10 00:00:00'). Yani sonuçlarınızı veren '2016-03-10 00:00:00' dan '2016-03-15 00:00:00' a kadar kontrol ediyorsunuz.

Bir gün sonra deneyin veya mmm'nin nasıl verildiğini yayınlayın.

İlgili konular