Code Bye

mysql 中group by怎么样加聚合函数

表中数据为:
CardNo       Direction   PassTime
1768311 5 2016-05-30 10:28:25
1768311 5 2016-05-30 10:28:26
1768311 5 2016-05-30 10:39:13
1768311 5 2016-05-30 11:17:30
1768311 3 2016-05-30 16:05:21
1768311 3 2016-05-30 18:19:55
1768311 2 2016-05-30 18:20:00
查询语句为
SELECT
CardNo,
Direction,
max(PassTime)
FROM
TB_CHANNELPASS
WHERE
PassTime BETWEEN “2016-05-30”
AND “2016-05-31″
GROUP BY
CardNo,
DATE_FORMAT(PassTime,”%y-%m-%d”)
返回结果:
1768311 5 2016-05-30 18:20:00
2016-05-30 18:20:00对应的应该是2,问题出在哪?
解决方案

40

官方手册的说明很清楚。
引用

12.10.3. 具有隐含字段的GROUP BY

MySQL  扩展了 GROUP BY的用途,因此你可以使用SELECT 列表中不出现在GROUP BY语句中的列或运算。这代表 “对该组的任何可能值 ”。你可以通过避免排序和对不必要项分组的办法得到它更好的性能。例如,在下列问询中,你无须对customer.name 进行分组:
mysql> SELECT order.custid, customer.name, MAX(payments)
->        FROM order,customer
->        WHERE order.custid = customer.custid
->        GROUP BY order.custid;
在标准SQL中, 你必须将 customer.name添加到 GROUP BY子句中。在MySQL中, 假设你不在ANSI模式中运行,则这个名字就是多余的。
假设你从 GROUP BY 部分省略的列在该组中不是唯一的,那么不要使用这个功能! 你会得到非预测性结果。
在有些情况下,你可以使用MIN()和MAX() 获取一个特殊的列值,即使他不是唯一的。下面给出了来自包含排序列中最小值的列中的值:
SUBSTR(MIN(CONCAT(RPAD(sort,6,” “),column)),7)
See   3.6.4节,“拥有某个字段的组间最大值的行”.
注意,假设你正在尝试遵循标准 SQL, 你不能使用GROUP BY或 ORDER BY子句中的表达式。你可以通过使用表达式的别名绕过这一限制:
mysql> SELECT id,FLOOR(value/100) AS val
-> FROM tbl_name
-> GROUP BY id, val ORDER BY val;
然而, MySQL允许你使用GROUP BY 及 ORDER BY 子句中的表达式。例如:
mysql> SELECT id, FLOOR(value/100) FROM tbl_name ORDER BY RAND();


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明mysql 中group by怎么样加聚合函数