2010-08-24 32 views
1

我可以很容易地得到一個隨機記錄本:SQL Server 2005中:今天的隨機記錄

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找到記錄。

回答

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。

+0

更好的實現我要做的事情。 – DForck42 2010-08-24 19:21:47

+0

如果上述表格中沒有「2010-24-08」的記錄,該怎麼辦? – Kashif 2010-08-24 19:25:31

+0

@Muhammad Kashif Nadeem:沒有行 - 'TOP'像MySQL和PostgreSQL的'LIMIT'一樣,只限制從resulset返回的行數。 – 2010-08-24 19:28:38

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)

1

這是否給你你想要的東西?

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

這裏假定沒有比今天晚的日期。