簡化後的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