简化后的Demo:
表中有 id 和 operate_time 两列,每个id对应多个operate_time,需要查询 每个id的倒数第2次的operate_time.这就相当于要分组然后查询各组中第2条记录(按operate_time倒序后)。
网上查了一下解决方案后,有一个关于查询学生成绩的,当需求不一样,用 先 倒序后 top2,然后再正序取第1条,大概是这样子,但套不进来,发现了一个更简便的方法:用 rank() over()函数,eg:
with abc as
(
select rank() over(partition by id order by operate_time desc) ord,id,operate_time from use_log
)
select * from abc
WHERE ord=2