0

这是我的查询:

    Select Top 10 CS.CaseStudyID,
    CS.Title,
    CSI.ImageFileName
From CaseStudy CS
Left Join CaseStudyImage CSI On CS.CaseStudyID = CSI.CaseStudyID
And CSI.CSImageID in(
    Select Min(CSImageID) -- >not really satisfactory
    From CaseStudyImage
    Group By CaseStudyID
    )
Order By CS.CaseStudyID ASC

而不是 min(CSImageID) 我想从我的 CaseStudyImage 表中获得与特定案例研究相对应的随机记录

任何人都可以指出我正确的方向吗?

4

4 回答 4

1

通常,只是ORDER BY NEWID()做的伎俩

于 2008-12-18T07:50:22.577 回答
1

您可以使用排名函数和 newid() 来创建带有分组的随机顺序。

WITH CSI AS (
    SELECT CSI.CaseStudyID, CSI.ImageFileName,
        ROW_NUMBER() OVER(PARTITION BY CSI.CaseStudyID ORDER BY newid()) AS RowNumber
    FROM CaseStudyImage CSI
)
SELECT TOP (10) CS.CaseStudyID, CS.Title, CSI.ImageFileName
FROM CaseStudy CS LEFT JOIN CSI On CS.CaseStudyID = CSI.CaseStudyID
WHERE CSI.RowNumber = 1
ORDER BY CS.CaseStudyID ASC
于 2008-12-17T17:53:51.063 回答
0

ORDER BY RAND() LIMIT 1?

于 2008-12-16T11:43:43.730 回答
0

本文介绍了 t-sql 中随机抽样的 3 种技术。这取决于您对表结构的控制程度,其中之一可能确实想要您想要的。

于 2008-12-16T11:46:32.087 回答