前段时间在知乎看到一篇文章里面有讲到这样一个例子:
示例图:
下面是题主达到效果
我们可以注意到结果并不如满足他的期望,其实他的需求很简单:检索出数据分组后时间最高的记录。但他是这样干的:
把先按照时间 order by
对order by后的记录进行分组
建表语句我这里整理了一下,尽量还原了图里的表格:
CREATE TABLE t1 (
id int(11) NOT NULL AUTO_INCREMENT,
team int(11) NOT NULL,
foodate date NOT NULL,
PRIMARY KEY (id)
)
INSERT INTO `t1` VALUES ('1','1','2019-07-01'), ('2','1','2019-07-02'), ('3','1','2019-07-03'), ('4','2','2019-06-30'), ('5','2','2019-06-02'), ('6','2','2019-06-03'), ('7','3','2019-05-31'), ('8','3','2019-05-04'), ('9','3','2019-05-13');
我们的思路可以转化为:
1.先按照小组分组并获取分组后的最大时间
2.in查询时间匹配的数据
(这里我们忽略IN查询效率问题)
通过
SELECT MAX(foodate) FROM t1 GROUP BY team
查询出分组后的最大时间
然后按我们所说的进行in查询
SELECT * FROM t1 WHERE foodate in (SELECT MAX(foodate) FROM t1 GROUP BY team)
可以看到这个时候结果已经符合我们的预期
这里只是看了文章后尝试里面讲到的一个思路,分享记录一下,欢迎探讨。
参考链接来自知乎Java3y~~~~