select scrname,stucount from scrtab
select top 3 scrname,stucount from scrtab order by stucount
先按人数排序,然后在查出前三个
sql server查询前n条记录:
因为id可能不是连续的,所以不能用取得10
个人觉得难点在每隔2小时怎么取, 我的方式是取日期(0时0分0秒)然后加上小时数除以2作为标志每2小时的时间间隔(如果时间间隔不是整的小时, 且可以被24整除, 那么尚未想到好的方法)而取前3条记录则有row_number分组函数可以使用.
示例(SQL Server 2005或以上)如下:
declare @tb table (ss int, dt datetime) -- 定义表变量insert into @tb -- 插入测试用数据
select 1, '2013/1/20 12:01'
union
select 7, '2013/1/20 12:01'
union
select 3, '2013/1/20 13:21'
union
select 8, '2013/1/20 13:13'
union
select 5, '2013/1/20 12:049'
-- 测试SQL, dt为时间值, hourSpan为分在哪个时间间隔内
select ss, dt, hourSpan
from (
-- 用row_number来按时间间隔分组编号, 且按ss字段升序编号
select ss, row_number() over (partition by convert(nvarchar(10), dt, 120) + '_' + cast(datepart(hour, dt) / 2 as nvarchar(2)) order by ss) as rownumber, dt, convert(nvarchar(10), dt, 120) + '_' + cast(datepart(hour, dt) / 2 as nvarchar(2)) as hourSpan
from @tb
) s
where s.rownumber <= 3 -- 取分组编号值小于等于3的记录
将这个逻辑套用过去, 大概能满足你的需求. 不过, 如果是经常执行这样的查询, 建议建一个字段存此时间间隔值或使用视图, 不然每次查询都有计算, 速度不好.
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)