ROW_NUMBER SQL Server 2005的LIMIT功能实现(ROW_NUMBER()排序函数)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ROW_NUMBER SQL Server 2005的LIMIT功能实现(ROW_NUMBER()排序函数)相关的知识,希望对你有一定的参考价值。

参考技术A 语法:
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子句,执行完后,再给每一条记录进行编号。

SQL SERVER 常用命令

红色为常用

0、row_number() over 和数据组合sale/cnt

select *,row_number() over(order by productname) as rownumber
from products
select row_number() over(order by sale/cnt desc) as sort, sale/cnt
from (
select -60 as sale,3 as cnt from dual union
select 24 as sale,6 as cnt from dual union
select 50 as sale,5 as cnt from dual union
select -20 as sale,2 as cnt from dual union
select 40 as sale,8 as cnt from dual);

1. 查看数据库的版本
select @@version

select @@connections //返回 SQL Server 自上次启动以来尝试的连接数,无论连接是成功还是失败

select @@max_connections //返回 SQL Server 实例允许同时进行的最大用户连接数。返回的数值不一定是当前配置的数值

select @@lock_timeout //返回当前会话的当前锁定超时设置(毫秒)。
2.查看数据库里用户和进程的信息
sp_who
查看SQL Server数据库里的活动用户和进程的信息
sp_who ‘‘active‘‘
查看SQL Server数据库里的锁的情况
sp_lock


进程号1--50是SQL Server系统内部用的,进程号大于50的才是用户的连接进程.
spid是进程编号,dbid是数据库编号,objid是数据对象编号
查看进程正在执行的SQL语句
dbcc inputbuffer ()

推荐大家用经过改进后的sp_who3过程可以直接看到进程运行的SQL语句
sp_who3

检查死锁用sp_who_lock过程
sp_who_lock

3. 查看所有数据库名称及大小
sp_helpdb

4. 查看数据库启动的参数
sp_configure

5. 查看所有数据库用户登录信息
sp_helplogins

查看所有数据库用户所属的角色信息
sp_helpsrvrolemember


6.查看某数据库下某个数据对象的大小
sp_spaceused @objname


7.查看数据库里所有的存储过程和函数
use @database_name
sp_stored_procedures
查看存储过程和函数的源代码
sp_helptext ‘‘@procedure_name‘‘

查看包含某个字符串@str的数据对象名称
select distinct object_name(id) from syscomments where text like ‘‘%@str%‘‘

创建加密的存储过程或函数在AS前面加WITH ENCRYPTION参数

解密加密过的存储过程和函数可以用sp_decrypt过程


8.分析SQL Server SQL 语句的方法:
set statistics time {on | off}
set statistics io {on | off}
图形方式显示查询执行计划

在查询分析器->查询->显示估计的评估计划(D)-Ctrl-L 或者点击工具栏里的图形

文本方式显示查询执行计划
set showplan_all {on | off}

set showplan_text { on | off }
set statistics profile { on | off }

9. 查看数据库所在机器操作系统参数
exec master..xp_msver

10. 查看数据库启动时间
select convert(varchar(30),login_time,120) from master..sysprocesses where spid=1

11. 查看链接服务器
sp_helplinkedsrvlogin

查看远端数据库用户登录信息
sp_helpremotelogin

还可以用sp_toptables过程看最大的N(默认为50)个表

查看某数据库下某个数据对象的索引信息
sp_helpindex @objname

还可以用SP_NChelpindex过程查看更详细的索引情况
SP_NChelpindex @objname

查看某数据库下某个数据对象的的约束信息
sp_helpconstraint @objname

12.收缩数据库日志文件的方法
收缩简单恢复模式数据库日志,收缩后@database_name_log的大小单位为M
backup log @database_name with no_log
dbcc shrinkfile (@database_name_log, 5)

 

13.已知列名,查找表

select tab.name from syscolumns as col inner join sysobjects as tab on col.id=tab.id where col.name=‘Item_IDX‘


























































































以上是关于ROW_NUMBER SQL Server 2005的LIMIT功能实现(ROW_NUMBER()排序函数)的主要内容,如果未能解决你的问题,请参考以下文章

ROW_NUMBER() OVER()

LINQ to SQL 模拟实现 ROW_NUMBER() OVER(ORDER BY ...) 的功能

SQL一对多取子表最新记录的所有字段(ROW_NUMBER()OVER()函数的应用)

MySQL5.7实现ROW_NUMBER窗口函数功能SQL

sql 中 rank() over,dense_rank(),row_number() 的区别

SQL2012分页offset fetch 比较SQL2005/2008的ROW_Number