/********** 利用排名函数 NTILE() 对现有数据排序的改造 ***************/
-- select left('claro',2) 整理于西安, -06-10 13:56:22.530
--> Microsoft SQL Server 2005 - 9.00.1406.00
-- (Intel X86) Mar 3 2007 18:40:02 Copyright (c) 1988-2005
--Microsoft Corporation Enterprise Edition on Windows 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
*/