2010-04-04 2 views
1

У меня есть две таблицы, события и фотографии, которые связаны вместе через столбец «Event_ID». Я хочу выбрать ОДИН случайное фото из каждого события и отобразить его.SQL Server - выберите одну случайную запись, не отображающую дубликаты

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

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

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() 

Благодаря

Люк Stratton

ответ

4

Вы можете использовать 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

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

Смежные вопросы