sql组内排序

发现一个奇技淫巧,mysql用group by分组后如果select *那么获得的是哪一条数据?

貌似是from子句中顺序的第一条语句,如果from子句中对表中按某字段排序,那么最终就可以达到选出分组极值的效果。

譬如对于如下表
mysql> select * from test order by dt desc;
+——+———–+———-+
| id   | followers | dt       |
+——+———–+———-+
| 2    | 15        | 20160729 |
| 1    | 9         | 20160726 |
| 2    | 8         | 20160726 |
| 1    | 11        | 20160725 |
+——+———–+———-+
4 rows in set (0.00 sec)
想选出“每个id的dt最大的一条数据”。
mysql> select * from (select * from test order by dt desc) as A group by A.id;
+——+———–+———-+
| id   | followers | dt       |
+——+———–+———-+
| 1    | 9         | 20160726 |
| 2    | 15        | 20160729 |
+——+———–+———-+

2 rows in set (0.00 sec)

当然这只是mysql如此。其他sql譬如HQL就不支持在分组语句中select *。

共有 0 条评论

发表评论

电子邮件地址不会被公开。