SQL:获取每个key下最新创建的记录

今天遇到了一个好玩的问题

问题:

有一个含有key和createdTime字段的表,表里存在很多不同的key值,每个key值下有很多记录。
我想要查出每个key下面cratedTime最大的记录,即每个key下最新创建的记录。

解决:

最初的思路: 不通过sql,而是通过java解决。

即拿出全量数据,通过java的stream转成一个Map(key,List ),接着将每个List根据创建时间排序,就可以取最新创建的记录了。

通过sql解决

转念一想,SQL中的group by语句其实类似于构建Map,何不直接在SQL中解决呢。
或许可以通过

select `key`, max(createdTime) from table group by `key`;

拿到每个key下的最新记录对应的时间,然后把这个sql语句作为子语句,我在外层做个嵌套就可以获取到想要的记录了。
但这样做还是觉得麻烦

更优解

其实很容易被忽略的一点就是表里自增的id,如果设置了自增id,那么这个id和创建时间是正相关的,判断记录的创建时间其实只需要根据id大小判断,并不需要看createdTime,并且sql语句更加简洁效率。如下

select * from table where `id` in (SELECT MAX(`id`) FROM table  group by `key`);

猜你喜欢

转载自www.cnblogs.com/yanch01/p/12709945.html
今日推荐