我可以轻松获得随机记录:
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条记录。
答案 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()
这假设没有比今天晚的日期。