sql server 分頁按時間排序
select * from (select<include refid="Base_Column_List"/>, ROW_NUMBER() OVER(Order by check_date )-1 AS RowNumber from user <include refid="pageListQueryCondition"/> ) c where RowNumber BETWEEN (#{pagination.page,jdbcType=INTEGER}-1)*#{pagination.rows,jdbcType=INTEGER} and #{pagination.page,jdbcType=INTEGER}*#{pagination.rows,jdbcType=INTEGER}-1
總體思路是:使用SqlServer中的ROW_NUMBER() OVER(按某一屬性升序或降序)函數來對我們所有的數據進行排序,從1開始,為每一條分組記錄返回一個數字。
使用:SELECT * FROM (SELECT *,row=row_number() OVER(ORDER BY name DESC) FROM tableOne ) AS rowTable WHERE rowTable BETWEEN + ((curPage.intValue() - 1) * PageCount.intValue() + 1) + " AND " + curPage.intValue()*PageCount.intValue();
這句話的意思就是先將tableOne中所有的數據按照name字段的降序排好序作為新表rowTable,然后按照當前頁curPage和每頁行數PageCount進行分頁,因為排序是從1開始的,所以PageCount也是從1開始,這樣就可以做到先將所有數據排序在進行分頁。