SQL Server - 选择一个不显示重复项的随机记录

时间:2010-04-04 12:13:09

标签: sql sql-server tsql

我有两个表,事件和照片,它们通过'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()

由于

Luke Stratton

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

看看this xaprb article。它显示了您可以使用的几种技术。它建议采用最小行和自连接方法。