sql如下:
select *
from (
select tmp_page.*, rownum row_id
from (
select
d.CHECK_TIME
d.CAR_NO carNo,
from aaa d
order by d.CHECK_TIME desc
) tmp_page
where rownum <= 20
)
where row_id > 0
問題排查步驟:
1.查看sql:
select
d.CHECK_TIME
d.CAR_NO carNo,
rownum
from aaa d
order by d.CHECK_TIME desc
select tmp_page.*, rownum row_id
from (
select
d.CHECK_TIME
d.CAR_NO carNo,
rownum
from aaa d
order by d.CHECK_TIME desc
) tmp_page
where rownum <= 20
發現兩次的rownum結果不同,經分析,CHECK_TIME的數據內容格式:YYYYMMDDHH,不能保證排序的唯一性,導致了可能數據會丟失現象。
解決方案: order by d.CHECK_TIME desc,d.pk desc, pk能保證排序的唯一性。
如果沒有主鍵pk,可以用 order by d.CHECK_TIME desc,d.ROWID desc 保證排序的唯一性。
總結:只要order by之后的字段能保證排序唯一性,就不會出現問題。比如order by pk,就不會有問題;或者組合的order by,只要能保證唯一就OK。
