最近发现网上找的 group by 组内排序语句在不同的mysql版本中结果不一样。
 

建表语句:

 
SET FOREIGN_KEY_CHECKS=0;
 
-- ----------------------------
-- Table structure for wp_posts
-- ----------------------------
DROP TABLE IF EXISTS `wp_posts`;
CREATE TABLE `wp_posts` (
  `id` int(11) DEFAULT NULL,
  `title` varchar(6) DEFAULT NULL,
  `post_date` datetime DEFAULT NULL,
  `post_author` varchar(3) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
 
-- ----------------------------
-- Records of wp_posts
-- ----------------------------
INSERT INTO `wp_posts` VALUES ('1', 'Title1', '2013-01-01 00:00:00', 'Jim');
INSERT INTO `wp_posts` VALUES ('2', 'Title2', '2013-02-01 00:00:00', 'Jim');
INSERT INTO `wp_posts` VALUES ('3', 'Title3', '2016-04-22 11:27:37', 'Jim');
 
 
 
 
我在网上查到group by 组内排序的基本做法是这样的:
 
方法1:
 
SELECT wp_posts.* FROM 
(
    SELECT * 
    FROM wp_posts
    ORDER BY wp_posts.post_date DESC
) AS wp_posts
 
GROUP BY wp_posts.post_author 
 
这种方法在mysql版本5.6.26是没问题的:
 
 
正确的搜出了最大的时间Title3:
 
 
 
 
在mysql版本5.7.11-log是有问题的:
 
 
搜出了最小的时间Title1:
 
 
 
这种排序方法在不同的mysql版本可能结果不一样,那有木有更好的方法呢?
我在
找到了答案。
 
 
 
方法2:
 
SELECT p1.* 
FROM wp_posts p1
INNER JOIN
(
    SELECT max(post_date) MaxPostDate, post_author
    FROM wp_posts
 
    GROUP BY post_author
) p2
  ON p1.post_author = p2.post_author
  AND p1.post_date = p2.MaxPostDate
order by p1.post_date desc
 
 
用这种方法排序,以上2种mysql版本都可以用:
 
 
版本5.6.26:
 
 
 
版本5.7.11-log:
 
 
 
 
搜索结果一样,吼吼。
 
总结一下:
 
group by 组内排序
 
方法1:
 
SELECT wp_posts.* FROM 
(
    SELECT * 
    FROM wp_posts
    ORDER BY wp_posts.post_date DESC
) AS wp_posts
 
GROUP BY wp_posts.post_author 
在不同的mysql版本中结果可能不一样;
 
方法2:
 
SELECT p1.* 
FROM wp_posts p1
INNER JOIN
(
    SELECT max(post_date) MaxPostDate, post_author
    FROM wp_posts
 
    GROUP BY post_author
) p2
  ON p1.post_author = p2.post_author
  AND p1.post_date = p2.MaxPostDate
order by p1.post_date desc

在版本5.6.26和版本5.7.11-log中结果是一样的(其他版本我没试过)。

 
 
 

最新文章

  1. C#开发微信门户及应用(12)-使用语音处理
  2. ASCII 计算机码
  3. php命名空间和autoload
  4. RDLC系列之三 图片显示
  5. 网站繁简切换的JS遇到的一个BUG
  6. 最全 Adobe 系列产品 CS6版本 序列号/注册码
  7. C# 打开PPT文件另存为PPTX
  8. OpenWrt启动过程分析
  9. 「Poetize9」礼物运送
  10. iOS9适配系列教程
  11. golang windows 安装方法
  12. [转载] HBase vs Cassandra:我们迁移系统的原因
  13. Qt----拖拽
  14. Redis代码——Python篇
  15. 使用rownum对oracle分页【原】
  16. 【NOIP 2015】Day2 T3 运输计划
  17. jupyter环境安装
  18. 递归获取包下的class文件
  19. [转]PostgreSQL教程(十六):系统视图详解
  20. python daal test

热门文章

  1. Angular4初学
  2. Java动态规划
  3. ZooKeeper学习第八期——ZooKeeper伸缩性(转)
  4. jvm(4)---垃圾回收(哪些对象可以被回收)
  5. Java多线程同步工具类之CyclicBarrier
  6. 全自动Landsat影像温度反演软件开发
  7. Redi缓存注意事项
  8. mac下mysql的卸载和安装
  9. Django中CBV View的as_view()源码解析
  10. Fiddler如何自动修改请求和响应包