1

これでランダムなレコードを簡単に取得できます:

SELECT *    FROM MyTable    ORDER BY NewId() 

これで「今日の日付」のレコードを簡単に取得できます。

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

しかし、どうすれば2つを組み合わせることができますか?

1 つのランダムなレコードを取得します... 今日の日付を持つものは何でも。

何も見つからない場合...昨日から 1 つのランダムなレコードを取得します (today-1)。

何も見つからない場合...などから1つのランダムレコードを取得する、など、today-2

... 1 件のレコードが見つかるまで。

4

3 に答える 3

6

日付を条件による主な順序にするだけです。

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

SQL 2008 または 2008 より前の場合、日付を完全な日時として保存する場合は、日付の部分のみに四捨五入する必要があります。cast (Date as DATE)cast(floor(cast(Date as FLOAT)) as DATETIME)

于 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 に答える