在SQL2005中利用NTILE()排名函数对现有数据进行排序改造

来源:互联网 发布:淘宝运营培训课件 编辑:程序博客网 时间:2024/05/02 18:18

/**********利用排名函数NTILE()对现有数据排序的改造***************/

 

-- selectleft('claro',2) 整理于西安,-06-10 13:56:22.530

-->Microsoft SQL Server 2005 - 9.00.1406.00 

-- (IntelX86)   Mar  3 2007 18:40:02   Copyright (c) 1988-2005

--MicrosoftCorporation  Enterprise Edition onWindows NT 5.2 (Build 3790: Service Pack 2)

 

--在现有数据中分区生成排序数据(三)

--例一:设定划分3个分区

SELECT userid=NTILE(3) OVER (ORDER BY 日期),编号,日期,时间 --按每个分区被划分成的存储桶的数量进行排名

FROM (

select 1 编号,'20090601' 日期,'0701' 时间

union all select 1,'20090601','1130'  

union all select 1,'20090601','1400' 

union all select 1,'20090601','1530'

union all select 1,'20090602','1550' ) a

 

--因设定将表分区划分为3个,总行数为5,分区的行数不能被3 整除故三个分区中第一个分区包含2 行,第二个分区包含2 行,而第三个分区只包含1 行。

--所以排名按结果集userid所示。

/*

userid 编号 日期 时间

1   1   20090601   1130

1   1   20090601   1400

2   1   20090601   1530

2   1   20090601   0701

3   1   20090602   1550

*/

--例二:设定划分2个分区

SELECT userid=NTILE(2) OVER (ORDER BY 日期),编号,日期,时间 --按每个分区被划分成的存储桶的数量进行排名

FROM (

select 1 编号,'20090601' 日期,'0701' 时间

union all select 1,'20090601','1130'  

union all select 1,'20090601','1400' 

union all select 1,'20090601','1530'

union all select 1,'20090602','1550' ) a

 

--因设定将表分区划分为2个,总行数为5,分区的行数不能被2 整除故三个分区中第一个分区包含3 行,第二个分区包含2 行。

--所以排名按结果集userid所示。

/*

userid 编号 日期 时间

1   1   20090601   1130

1   1   20090601   1400

1   1   20090601   1530

2   1   20090601   0701

2   1   20090602   1550

*/

原创粉丝点击