orcale 使用創建日期排序然後分頁每次取排序後的固定條數

来源:http://www.cnblogs.com/gczmn/archive/2017/12/07/7997992.html
-Advertisement-
Play Games

需求: 一個使用mybatis分頁插件的分頁列表, 現在要求新增一條數據或者修改一條數據後,顯示在最前端 思路: 使用sql , 先將查詢出來的數據排序, 然後使用rownum > page*size 和rownum <= (page+1)*size 條件取固定條數的數據 問題 : 執行sql時遇到 ...


需求:

     一個使用mybatis分頁插件的分頁列表, 現在要求新增一條數據或者修改一條數據後,顯示在最前端

思路:

   使用sql , 先將查詢出來的數據排序, 然後使用rownum > page*size 和rownum <= (page+1)*size 條件取固定條數的數據

問題 :

   執行sql時遇到一個問題, 因為使用order by tn.create_time desc 進行降序排列,是在where條件查詢後, 所以rownum序號已經生成, 在排序rownum的值不會變, 改變的是數據順序 ,

  當使用rownum > page*size 和rownum <= (page+1)*size取值時其實取的就是沒排序前的固定條數, 也就是說, order by雖然排序了, 可以取值沒有取排完序後的數據

解決方法:

 方法一:

SELECT *
FROM (
    SELECT tn.ID,
           ROW_NUMBER() OVER(PARTITION BY tn.valid ORDER BY NVL(tn.modify_time,tn.create_time) desc) RN 
    FROM table_name tn 
    JOIN table_name2 tn2 ON tn.ID = tn2.ID 
    WHERE tn.condition = '條件'
    )
    WHERE RN >(page*size) AND RN <= (page + 1)*size;

 因為觀察數據特點,發現存在一個標誌可用\不可用狀態的欄位, 所以使用 ROW_NUMBER()  OVER (PARTITION BY COL1 ORDER BY COL2)  表示根據COL1分組,在分組內部根據 COL2排序,

根據可用狀態分組,所有可用的就會進行編號,然後根據創建時間或者修改時間進行組內排序 ,又因為新增的數據沒有修改時間,而新增後創建時間不變,只有修改時間改變,所以使用 NVL(tn.modify_time,tn.create_time) 判斷,

如果修改時間為空(新增操作)就使用創建時間排序, 如果修改時間不為空(修改操作)那麼就使用創建時間排序,  然後使用 WHERE RN >(page*size) AND RN <= (page + 1)*size 傳入page(第幾頁)和size(每頁長度)獲取數據

方法二 :

select * from 
  (
   select row_.*, rownum rownum_ from 
    (
    select od.*,rownum from 
     ( 
      select *
      from table_name tn 
      join table_name2 tn2 ON tn.ID = tn2.ID 
      WHERE tn.condition = '條件' order by NVL(tn.modify_time,tn.create_time) DESC
    ) od
   ) row_ where rownum <= (page + 1)*size 
  )where rownum_ > (page*size);

這是另一個思路, 首先將所有符合條件的數據根據創建時間進行排序,形成一張按創建時間排序的臨時表,然後在給這張表添加上rownum序號,並取出 rownum <= (page + 1)*size 條數據,

形成排序後的前 (page + 1)*size 條臨時表,最後取出需要的(page*size)到(page + 1)*size條數據


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、控制流 從接觸 面向過程語言 開始,使用控制流編程的概念已是司空見慣。 分支 和 迴圈 是最常見的控制流形式。由於控制條件的存在,總有一部分代碼片段會執行,另一部分不會執行。 在控制流中,想要進行數據傳遞,最關鍵的是藉助於 變數 保存中間狀態。因此,控制流編程看起來是 將數據嵌套在控制流內 的編 ...
  • 一、簡介 Microsoft SQL Server 2005之後,實現了對 Microsoft .NET Framework 的公共語言運行時(CLR)的集成。CLR 集成使得現在可以使用 .NET Framework 語言編寫代碼,從而能夠在 SQL Server 上運行,現在就可以通過 C# 來 ...
  • 問題描述 有表一 tableA tid username title 1 lily 我公司將進行xx培訓 2 angus 關於秋游的通知 3 boss 這個月不發獎金 4 vivi 新產品上市 表二 tableB tid time txt 1 0809 大家快來。。。。 2 0810 我是新來的,大 ...
  • classes12.jar,ojdbc14.jar,ojdbc5.jar和ojdbc6.jar的區別,之間的差異 在使用Oracle JDBC驅動時,有些問題你是不是通過替換不同版本的Oracle JDBC驅動來解決的?最常使用的ojdbc14.jar有多個版本,classes12.jar有多個版本 ...
  • 系統環境:WIN 10 64位 1、安裝Mysql odbc connector 插件 文章說明鏈接: https://www.cnblogs.com/santiagoMunez/p/4780301.html 插件下載鏈接: https://dev.mysql.com/downloads/conne ...
  • 一、知道原資料庫密碼。 登錄mysql # mysql -uroot -p Enter password:【輸入原來的密碼】 mysql>use mysql; mysql>update user set password=passworD("新密碼") where user='root'; mysq ...
  • 4.批量解鎖declare cursor mycur isselect b.sid,b.serial# from v$locked_object a,v$session bwhere a.session_id = b.sid group by b.sid,b.serial#; begin for c ...
  • 使用0值表示沿著每一列或行標簽\索引值向下執行方法 使用1值表示沿著每一行或者列標簽模向執行對應的方法 下圖代表在DataFrame當中axis為0和1時分別代表的含義: axis參數作用方向圖示 另外,記住,Pandas保持了Numpy對關鍵字axis的用法,用法在Numpy庫的辭彙表當中有過解釋 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...