2010-04-04 27 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() 

感谢

卢克斯特拉顿

回答

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。它显示了你可以使用的几种技术。它建议采用最小行和自连接方法。