手机
当前位置:查字典教程网 >编程开发 >mssql数据库 >ROW_NUMBER SQL Server 2005的LIMIT功能实现(ROW_NUMBER()排序函数)
ROW_NUMBER SQL Server 2005的LIMIT功能实现(ROW_NUMBER()排序函数)
摘要:语法:ROW_NUMBER()OVER([])备注:ORDERBY子句可确定在特定分区中为行分配唯一ROW_NUMBER的顺序。参数:将FR...

语法:

ROW_NUMBER() OVER([ <partition_by_clause>] <order_by_clause>)

备注:

ORDER BY子句可确定在特定分区中为行分配唯一ROW_NUMBER的顺序。

参数:

<partition_by_clause> 将FROM子句生成的结果集划入应用了ROW_NUMBER函数的分区。

<order_by_clause> 确定将ROW_NUMBER值分配给分区中的行的顺序。有关详细信息,请参阅ORDER BY子句(Transact-SQL)。

返回类型:

bigint

类似于MySQL的LIMIT功能语法实例:

复制代码 代码如下:

SELECT * FROM (SELECT ROW_NUMBER() OVER(ORDER BY id ASC) AS rownum, * FROM MyTable) AS items WHERE items.rownum BETWEEN 20 AND 30;

sql ROW_NUMBER() 排序函数

1使用row_number()函数进行编号:如

复制代码 代码如下:

select email,customerID, ROW_NUMBER() over(order by psd) as rows from QT_Customer

原理:先按psd进行排序,排序完后,给每条数据进行编号。

2.在订单中按价格的升序进行排序,并给每条记录进行排序

代码如下:

复制代码 代码如下:

select DID,customerID,totalPrice,ROW_NUMBER() over(order by totalPrice) as rows from OP_Order

3.统计出每一个各户的所有订单并按每一个客户下的订单的金额 升序排序,同时给每一个客户的订单进行编号。这样就知道每个客户下几单了。

代码如下:

复制代码 代码如下:select ROW_NUMBER() over(partition by customerID order by totalPrice) as rows,customerID,totalPrice, DID from OP_Order

4.统计每一个客户最近下的订单是第几次下的订单。

代码如下:

复制代码 代码如下:

with tabs as

(

select ROW_NUMBER() over(partition by customerID order by totalPrice) as rows,customerID,totalPrice, DID from OP_Order

)

select MAX(rows) as '下单次数',customerID from tabs group by customerID

5.统计每一个客户所有的订单中购买的金额最小,而且并统计改订单中,客户是第几次购买的。

如图:

上图:rows表示客户是第几次购买。

思路:利用临时表来执行这一操作

1.先按客户进行分组,然后按客户的下单的时间进行排序,并进行编号。

2.然后利用子查询查找出每一个客户购买时的最小价格。

3.根据查找出每一个客户的最小价格来查找相应的记录。

代码如下:

复制代码 代码如下:

with tabs as

(

select ROW_NUMBER() over(partition by customerID order by insDT) as rows,customerID,totalPrice, DID from OP_Order

)

select * from tabs

where totalPrice in

(

select MIN(totalPrice)from tabs group by customerID

)

5.筛选出客户第一次下的订单。

思路。利用rows=1来查询客户第一次下的订单记录。

代码如下:

复制代码 代码如下:

with tabs as

(

select ROW_NUMBER() over(partition by customerID order by insDT) as rows,* from OP_Order

)

select * from tabs where rows = 1

select * from OP_Order

6.rows_number()可用于分页

思路:先把所有的产品筛选出来,然后对这些产品进行编号。然后在where子句中进行过滤。

7.注意:在使用over等开窗函数时,over里头的分组及排序的执行晚于“where,group by,order by”的执行。

如下代码:

复制代码 代码如下:

select

ROW_NUMBER() over(partition by customerID order by insDT) as rows,

customerID,totalPrice, DID

from OP_Order where insDT>'2011-07-22'

以上代码是先执行where子句,执行完后,再给每一条记录进行编号。

【ROW_NUMBER SQL Server 2005的LIMIT功能实现(ROW_NUMBER()排序函数)】相关文章:

SQL Server 2005通用分页存储过程及多表联接应用

在SQL Server 2005所有表中搜索某个指定列的方法

Sql Server2005实现远程备份数据库

SQL2005 学习笔记 窗口函数(OVER)

sql server 2005中使用with实现递归的方法

SQL Server 2005 中使用 Try Catch 处理异常

SQL Server2008导出数据生成文件

SQL SERVER 的SQL语句优化方式小结

SQL Server 2008 正式版安装指南 包含序列号

sql server2008 排序函数

精品推荐
分类导航