91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

在oracle數據庫中獲取最新一條數據會遇到哪些問題

發布時間:2021-01-19 14:55:12 來源:億速云 閱讀:469 作者:Leah 欄目:開發技術

這篇文章給大家介紹在oracle數據庫中獲取最新一條數據會遇到哪些問題,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

記一次 開發中遇到的坑:

第一種情況 rowid

select * from table where rowid=(select max(rowid) from table )

這種方式是取最大的rowid作為最新的數據,但是有一個隱患 :數據庫一旦有刪除操作,rowid不能保證每次都是遞增的!即max(rowid)并不一定就是最新的數據,盡管可能不會每次復現 但這個問題是絕對存在的!

第二種情況 使用rownum (或相同思路)

select t.* from (select ti.sysno,ti.cr_date from t_insurance ti order by ti.selldatetime desc ) t where rownum = 1

這有很大一個問題,如果排序字段數據庫使用的是date類型,而且存在時分秒剛好相同的數據(尤其高并發項目中),我們子查詢語句中 的確可以準確的 order by desc出來,但是一旦外層套了一層select ,查出來的很可能就不是子查詢里面的第一條數據,詳細如圖:
11:35:25存在兩條數據 執行選中的查詢sql,

在oracle數據庫中獲取最新一條數據會遇到哪些問題

但是 當我們加了一層select,可以看到 已經不是上面的第一條數據了

在oracle數據庫中獲取最新一條數據會遇到哪些問題

類似的,不管怎么寫的花里胡哨,如下sql,子查詢里面 row_row = 1時,sysno確實為3126 1018 0001 5Z14,但是外面套了一層select 結果也變了

 select * from
(select t.sysno,
  t.cr_date,
  row_number() over(order by t.cr_date desc) row_row from t_insurance t) 
  where row_row = 1

同理 用with temp as 也是一樣的情況,取不到最新的結果。

解決方法:

暫時沒有從寫什么高級的sql語句層面想到好的辦法,(如果有大佬有好的方法,希望可以指點一二)

提供一些思路:如果項目沒有上生產 或者說是小項目,那還可以追加自增列,或者數據庫使用時間戳類型,但是上了生產 改動數據庫是大忌。

一般的,數據表中還會有其它的字段可以作為輔助排序,例如一段時間內的單號是遞增的 那么可以多個字段排序 例如 order by date desc,orderNo desc ,(我是通過這種方式解決的,但還是不治根 萬一哪天遇到數據庫沒其他輔助排序字段 問題還是得不到解決)

實在不行 就根據實際業務 看看能不能對時間加限制(如果數據量不大 不加也罷),select * from table where date >=xxxx order by desc date ,然后把一堆數據查詢出來,在代碼里面list.get(0)取出第一條數據。

關于在oracle數據庫中獲取最新一條數據會遇到哪些問題就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

麦盖提县| 合江县| 扶沟县| 友谊县| 绵阳市| 方城县| 嘉兴市| 齐齐哈尔市| 长乐市| 杂多县| 靖西县| 绥滨县| 宜宾县| 鸡泽县| 眉山市| 汉沽区| 罗田县| 渭源县| 靖宇县| 东兰县| 甘谷县| 建湖县| 广元市| 永济市| 太湖县| 磐安县| 临清市| 庄河市| 佳木斯市| 黄山市| 淮安市| 绥滨县| 平顺县| 视频| 泸定县| 东平县| 高平市| 驻马店市| 青阳县| 当雄县| 泰顺县|