2

我需要选择随机数量的行,但还要确保这些行不包含重复的 Image 值:

ImgID   Image

1637    PM1371564839.jpg    
1638    PM1371564839.jpg    
1639    PM1371564840.jpg    
1640    PM1371564840.jpg    
1641    PM1371564840.jpg    
1642    PM1371564841.jpg    
1643    PM1371564842.jpg    
1644    PM1371564842.jpg    
1645    PM1371564842.jpg    
1646    PM1371564843.jpg    
1647    PM1371564843.jpg

我做了一个 -select top 25 percent * from Table order by newid(); 这适用于事物的随机方面,但它会带回重复。我尝试了一个独特的,但它不喜欢按部分排序。基本上有没有更好的方法来显示随机的 3 个不重复的图像。

4

4 回答 4

3

看起来您有多个具有不同 ImgID 的图像

也许你想要这样的东西来获得独特的图像

SELECT TOP 25 PERCENT * FROM 
( 
  SELECT 
    max(imgID) imgID,  
    Image
  FROM [table]
  GROUP BY [Image]
) x
ORDER BY newid();
于 2013-06-18T20:08:58.880 回答
1

我将从以下内容开始:

SELECT TOP 25 PERCENT
 *
FROM
  (SELECT DISTINCT image FROM table) -- only unique image values
ORDER BY
 newid() -- random sort

请记住,他的查询有几个问题:

  • Subselect 读取整个表并DISTINCT在其上生成(可能需要索引)。
  • 很难在 external 中加入表中的其他列TABLE(没有会破坏DISTINCT的 PK)SELECT

这是上述查询的更具可读性的版本:

;WITH unique_images AS (
  SELECT DISTINCT image FROM TABLE
)
SELECT TOP 25 PERCENT
  *
FROM
  unique_images
ORDER BY
  new_id()
于 2013-06-18T20:01:50.580 回答
0
Use Northwind
GO


select top 10 CustomerID , OrderID
from
(
select distinct CustomerID, OrderID from dbo.[Orders]
) as derived1

order by newid()

映射到您的:

select top 25 PERCENT ImgID , Image
from
(
select distinct ImgID , Image from dbo.[MyTable]
) as derived1

order by newid()
于 2013-06-18T20:01:09.297 回答
0

这会做到:

SELECT TOP 3 ImgID, Image
FROM (SELECT DISTINCT ImgID, Image
      FROM #MyTABLE
      )sub
ORDER BY NEWID()

演示:SQL 小提琴

于 2013-06-18T20:03:46.620 回答