我如何将所有行数据按月分组,而不是按照某个日期使用组来消除

问题描述:

我很难根据日期对所有行数据进行分组。 这是我的表我如何将所有行数据按月分组,而不是按照某个日期使用组来消除

id  date  Company 
---|----------|------------- 
1 |2017-06-25| Inzpect 
2 |2017-07-04| Inzpect 
3 |2017-06-25| Meralco 
4 |2017-06-27| Ginebra 
5 |2017-06-26| Inzpect 

,这是我的SQL

SELECT date ,company FROM tbl_reports WHERE YEAR(date) = '2017' group by date 

这是结果我得到我的SQL

date  Company 
------------|---------- 
2017-06-25 | Inzpect 
2017-06-26 | Inzpect 
2017-06-27 | Ginebra 
2017-07-04 | Inzpect 

它为什么不从得到的所有数据我表和消除我的行1

我想要得到的东西是我想获得所有行和组它通过日期,但它总是与相同的日期排成一行:/。

date  Company 
------------|---------- 
2017-06-25 | Inzpect 
2017-06-25 | Meralco 
2017-06-26 | Inzpect 
2017-06-27 | Ginebra 
2017-07-04 | Inzpect 

你能帮助我的家伙:(

+2

Group by是一个聚合函数我怀疑你想要一个order by。 –

+1

我猜你使用'mysql',而不是'sql server',因为这会给你在sql server中的错误(因为它应该,因为它不能推断你的意图)。请不要标记未使用的产品!你期望会发生什么?你在分组,所以自然的行被分组在一起。这正是'group by'所打算做的。另外,你为什么分组但不聚合? – HoneyBadger

+1

_“为什么它没有从我的表中获取所有数据并且排除了我的行中的一行”_--以及因为您按日期分组。你有两个相同日期的记录,所以当然按日期分组会将这两个记录“凝结”成一个记录。这是什么GROUP BY _does_。如果你不想这样做,那么你为什么首先使用它?顺便说一下,选择不属于分组的一部分在SQL中是非法的; MySQL _tolerates_这个错误,如果配置这样做,但结果将是“随机的”。 – CBroe

试试下面的查询:

SELECT `date`, company 
FROM tbl_reports 
WHERE YEAR(`date`) = '2017' 
order by `date`; 

看来你需要一个ORDER BY不是像GROUP BY

SELECT date ,company FROM tbl_reports WHERE YEAR(date) = '2017' ORDER BY date 

的聚合函数GROUP BY GROUP BY语句i经常与集合函数(COUNT,MAX,MIN,SUM,AVG)一起使用来将结果集分组为一个或多个列。

ORDER BY默认情况下,ORDER BY关键字按升序排序记录。要按降序对记录进行排序,请使用DESC关键字。

首先,year()是一个函数,返回一个数字,所以不要把单引号放在比较中。这是更好的:

where year(date) = 2017 

其次,它是更好(性能)直接进行日期比较,而不是使用函数。

其他人提到你似乎想要order by。这是一个很好的查询版本:

select r.date, r.company 
from tbl_reports r 
where r.date >= '2017-01-01' and r.date < '2018-01-01' 
order by r.date;