2010-04-04 71 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。它顯示了你可以使用的幾種技術。它建議採用最小行和自連接方法。