1

我可以很容易地得到一个随机记录:

SELECT *    FROM MyTable    ORDER BY NewId() 

我可以通过以下方式轻松获得“今天的日期”的记录:

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

但我将如何将两者结合起来?

获取 1 条随机记录...与今天日期相关的任何内容。

如果没有找到...从昨天(today-1)中获取 1 条随机记录。

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

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

4

3 回答 3

6

只需按条件将日期作为主要顺序:

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

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

于 2010-08-24T19:22:24.707 回答
2

使用TOP 运算符

  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。

于 2010-08-24T19:20:41.160 回答
1

这会给你想要的吗?

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

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

于 2010-08-24T19:23:47.620 回答