Как я могу изменить это, чтобы получить случайную запись в конце соединения? - PullRequest
0 голосов
/ 16 декабря 2008

Вот мой запрос:

    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 ]

1 голос
/ 18 декабря 2008

обычно, просто ORDER BY NEWID() делает трюк

1 голос
/ 17 декабря 2008

Вы можете использовать функцию ранжирования и 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
0 голосов
/ 16 декабря 2008

Эта статья описывает 3 метода случайной выборки в t-sql Это зависит от того, насколько вы контролируете структуру таблицы, и кто-то из них может захотеть этого.

0 голосов
/ 16 декабря 2008

ORDER BY RAND() LIMIT 1 * * 1002

...