SQL Server - выберите одну случайную запись без дубликатов - PullRequest
1 голос
/ 04 апреля 2010

У меня есть две таблицы, события и фотографии, которые связаны друг с другом через столбец «Event_ID». Я хочу выбрать одну случайную фотографию из каждого события и отобразить их.

Как я могу это сделать?

У меня есть следующее, которое отображает все фотографии, которые связаны. Как я могу ограничить его одним на событие?

SELECT Photos.Photo_Id, Photos.Photo_Path, Photos.Event_Id, Events.Event_Title,
   Events.Event_StartDate, Events.Event_EndDate FROM Photos, Events 
WHERE 
   Photos.Event_Id = Events.Event_Id AND 
   Events.Event_EndDate < GETDATE() AND 
   Events.Event_EndDate IS NOT NULL AND
   Events.Event_StartDate IS NOT NULL
ORDER BY NEWID()

Спасибо

Люк Страттон

Ответы [ 2 ]

4 голосов
/ 04 апреля 2010

Вы можете использовать cross apply для получения одной случайной фотографии за событие:

select *
from Events
cross apply (
    select top 1 *
    from Photos
    where Photos.Event_Id = Events.Event_Id
    order by newid()
) RandomPhoto
where Events.Event_EndDate < GETDATE()
and Events.Event_EndDate IS NOT NULL
and Events.Event_StartDate IS NOT NULL

Используйте outer apply, если хотите получать события без фотографий.

0 голосов
/ 04 апреля 2010

Посмотрите на эту статью xaprb . Он показывает несколько методов, которые вы могли бы использовать. Рекомендуется минимальный ряд и самосоединение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...