日期:2014-05-18  浏览次数:20466 次

请问随机选择一段时间范围内数据的sql写法
表  
id 内容 创建日期
1 a 2011-4-5
2 b 2011-4-6
...................
100 x 2011-12-1


现在我要得到 2011-6-20 到 2011-7-1 时间段中 20条数据
1)这个时间段中最小的时间记录和最大的时间记录必须有
2)不足20条记录 显示全部记录
3)超过20条记录,随机选择其中18条记录和首尾记录一起输出


------解决方案--------------------
查3次union all
一次min
一次max
一次newid()
------解决方案--------------------
SQL code
select * from tb where 创建时间 in(select max(创建时间) from tb union all select min(创建时间) from tb )
union all
select top 18 * from tb where where 创建时间 not in(select max(创建时间) from tb union all select min(创建时间) from tb ) order by newid()

------解决方案--------------------
最后一行where风怒了
探讨

SQL code
select * from tb where 创建时间 in(select max(创建时间) from tb union all select min(创建时间) from tb )
union all
select top 18 * from tb where where 创建时间 not in(select max(创建时间) from tb union all sel……