Sql Server 2005:今天的随机记录

时间:2010-08-24 19:16:56

标签: sql sql-server sql-server-2005 random newid

我可以轻松获得随机记录:

SELECT *    FROM MyTable    ORDER BY NewId() 

我可以很容易地用“今天的日期”获得一条记录:

SELECT *    FROM MyTable    WHERE MyDate = "2010-24-08"  -- db doesn't store times

但我怎么把两者合并?

获得1条随机记录......今日约会的任何内容。

如果没有找到...从昨天(今天 - 1)获得1个随机记录。

如果没有找到...从等等获得1个随机记录,今天 - 2

...直到找到1条记录。

3 个答案:

答案 0 :(得分:6)

只需按条件将日期定为主要订单:

select top(1) *
from Table
order by Date desc, newid();

如果您将日期存储为全天时间,则需要将它们四舍五入到日期部分:SQL 2008中的cast (Date as DATE)或之前的cast(floor(cast(Date as FLOAT)) as DATETIME) 2008。

答案 1 :(得分:2)

使用TOP operator

  SELECT TOP 1 *    
    FROM MyTable    
   WHERE MyDate = "2010-24-08" 
ORDER BY NEWID() 

...与ORDER BY NEWID()结合使用。如果没有ORDER BY,通常会在大多数情况下获得过滤返回的记录的第一个插入行/记录,但确保顺序的唯一方法是使用ORDER BY子句。

SQL Server 2005+支持TOP值的括号,因此您可以在括号中使用变量而无需使用动态SQL。

答案 2 :(得分:1)

这会给你你想要的吗?

SELECT TOP 1 *
FROM MyTable
ORDER BY MyDate desc, NewId()

这假设没有比今天晚的日期。