SQL Server 2005: сегодня случайные записи - PullRequest
1 голос
/ 24 августа 2010

Я могу легко получить случайную запись с этим:

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 ]

6 голосов
/ 24 августа 2010

Просто сделайте дату дня основным заказом по условию:

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.

2 голосов
/ 24 августа 2010

Используйте оператор TOP :

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

... в сочетании с ORDER BY NEWID().Без ORDER BY вы в большинстве случаев получите первую вставленную строку / запись записей, возвращаемых фильтрованием, но единственный способ обеспечить порядок - с помощью предложения ORDER BY.

SQL Server2005+ поддерживает скобки для значения TOP, так что вы можете использовать переменную в скобках без использования динамического SQL.

1 голос
/ 24 августа 2010

Это дает вам то, что вы хотите?

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

Предполагается, что нет дат позже, чем сегодня.

...