1、开发中遇到这个问题,下面直接通过mysql的方式讲解
select id, start_time, eva_id from a where eva_id = 1 order by start_time desc
执行查询出来的数据是这样的
2、解决方案
那么问题来了, 我只想获取到start_time 最大的那个ID,那有些人就说了, 我直接limit 1不就行了?
确实哈, 对于一个limit1的数据确实就可以了哈。
但是现在如果针对于不同的eva_id , 取每个不同的eva_id中start_time最大的id进行limit 1就不对了。看下面最终的SQL如下:
SELECT id, start_time, eva_id
FROM (
SELECT id, start_time, eva_id,
ROW_NUMBER() OVER (PARTITION BY eva_id ORDER BY start_time DESC) AS rn
FROM a
) ranked
WHERE rn = 1 order by start_time desc
于是执行结果就是如下,这就达成了我们的目的:
3、函数解说
ROW_NUMBER() OVER (PARTITION BY eva_id ORDER BY start_time DESC)
这里面是 row_number() 是编排数字,给那些编排呢
PARTITION BY eva_id -- 通过eva_id这个字段进行分区
ORDER BY start_time DESC -- 通过 最终start_time进行排序
WHERE rn = 1 -- 取编排里面的第一个数据
有不懂的小伙伴欢迎下方留言哈,欢迎随时交流。