【问题标题】:How can I modify this to get a random record on the many end of a join?如何修改它以在连接的多端获取随机记录?
【发布时间】:2010-09-27 03:06:49
【问题描述】:

这是我的查询:

    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

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

谁能指点我正确的方向吗?

【问题讨论】:

    标签: sql tsql random


    【解决方案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
    

    【讨论】:

      【解决方案2】:

      通常,只需 ORDER BY NEWID() 就可以了

      【讨论】:

        【解决方案3】:

        ORDER BY RAND() LIMIT 1?

        【讨论】:

        • T-SQL 或 rand 中没有限制(有 newid()),我迷失了将等效的 Top 与 newid() 的顺序结合起来
        • 对不起,有兰德,但它还没有帮助我
        【解决方案4】:

        article 描述了 3 种在 t-sql 中进行随机抽样的技术。这取决于您对表结构的控制程度,其中之一可能确实想要您想要的。

        【讨论】:

          猜你喜欢
          • 2020-08-09
          • 2014-01-14
          • 2015-03-30
          • 2018-06-06
          • 2011-07-17
          • 2017-06-05
          • 2019-12-27
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多