mysql数据库的bug吗?不同电脑表现不一样

im1024 发布于 2017/07/25 17:22
阅读 129
收藏 0

#表的结构 `test3`

CREATE TABLE IF NOT EXISTS `test3` (
`id` int(11) NOT NULL auto_increment,
`bid` int(11) NOT NULL,
`cid` int(11) NOT NULL,
`dtime` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;

#转存表中的数据 `test3`

INSERT INTO `test3` (`id`, `bid`, `cid`, `dtime`) VALUES
(1, 1, 3, '2014-03-18 16:00:00'),
(2, 1, 10, '2014-03-18 17:00:00'),
(3, 2, 5, '2014-03-18 18:00:00'),
(4, 2, 6, '2014-03-18 19:00:00'),
(5, 1, 7, '2014-03-18 20:00:00');

二、通过子查询实现

1、sql语句

select * from(select * from test3 ORDER BY dtime DESC) as temp GROUP BY  bid ORDER BY dtime DESC;

 

有的电脑bid = 1组 是16点,有的是20点,就是说相反的

 

 

加载中
0
im1024
im1024

怀疑是5.7的Mysql有问题,5.6是20点,应该是符合预期

0
im1024
im1024

网上看的有人说的

"通过 explain 查看执行计划,可以看到没有 limit 的时候,少了一个 DERIVED 操作
估计是内部优化了,认为 ORDER BY 在这种语法中可忽略
有 LIMIT 限制涉及排序后的结果,不会忽略 ORDER BY,可以达到预期"

测试了一下

select * from(select * from test3 ORDER BY dtime DESC limit 999999999) as temp GROUP BY  bid ORDER BY dtime  
就行,太奇怪了,难道要这么搞?

0
im1024
im1024

https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html

根据官网的描述

还可以这样

select * from(select DISTINCT * from test3 ORDER BY dtime DESC  ) as temp GROUP BY  bid ORDER BY id  desc

0
DeMoNHaDeS
DeMoNHaDeS

group by 用的太不规范了。

group by查询的结果字段应该只有group by后面跟的字段和统计函数,其他字段都不应该有。

返回顶部
顶部