2016-03-24 8 views
0

I次のMySQLクエリ持っている:私は取得MySQLは、右のデータを返さない<=演算子

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

と結果は次のとおりです。

| 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 | 

あなたが見ることができるように、それは戻っていないデータ演算子を明示的に設定したにもかかわらず、2016-03-15については2016-03-15を含めることにしました。

私はまた、このようにBETWEENで試してみた:

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

と結果は同じでした。

どうしてですか?それを修正するために私は何ができますか?

+0

どのデータ型が 'JoinTime'ですか? – arootbeer

+0

日時です。 – Galil

+0

なぜ 'DATE()'関数を使うのですか? – Alex

答えて

4

は、あなただけの日付と比較されているとして、あなたはあなたが年、月、日でグループべきで、数ヶ月間の関連があるかもしれないとして、

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

また最初の日付にJoinTimeをキャストする必要があります。

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); 

あなたがそれを使用する方法、

2016-03-15 12:21:32 
のようなエントリそれは <=条件に一致しないとして、それは含まれませんので

2016-03-15 00:00:00 

に対してチェックされます。

3

JoinTimeのタイプがDateTimeで、「時間」の部分を指定しない場合、MySqlはあなたの時刻が午前0時( '2016-03-10 00:00:00')であるとみなします。したがって、あなたは結果を示す '2016-03-10 00:00:00'から'2016-03-15 00:00:00 'にチェックしています。

1日後に試してみてください。

関連する問題