我需要从集合中选择样本行。例如,如果我的select查询返回x行,那么如果x大于50,我希望只返回50行,但不只是前50行,而是均匀分布在结果集上的50行。本例中的表格记录了路线- GPS位置+ DateTime。我在DateTime上订购,需要一个合理的纬度和经度值的样本。提前感谢SQL Server 2008
发布于 2010-06-20 19:00:23
若要在SQL Server中获取示例行,请使用以下查询:
SELECT TOP 50 * FROM Table
ORDER BY NEWID();如果希望每第n行(在本例中为第10行)获取,请尝试执行以下查询:
SELECT * From
(
SELECT *, (Dense_Rank() OVER (ORDER BY Column ASC)) AS Rank
FROM Table
) AS Ranking
WHERE Rank % 10 = 0; Source
在这里可以找到更多查询为其他流行的关系型数据库选择随机行的示例:http://www.petefreitag.com/item/466.cfm
发布于 2010-06-20 19:00:32
每第n行得到50:
SELECT *
FROM table
WHERE row_number() over() MOD (SELECT Count(*) FROM table) / 50 == 0
FETCH FIRST 50 ROWS ONLY如果你想要一个随机样本,那就听从吉米·基恩的回答。
更新:关于它在MS SQL上运行的要求,我认为应该改为这样(虽然没有MS SQL Server可供测试):
SELECT TOP 50 *
FROM (
SELECT t.*, row_number() over() AS rn, (SELECT count(*) FROM table) / 50 AS step
FROM table t
)
WHERE rn % step == 0发布于 2010-06-20 18:54:46
我建议您在选择时将一个计算列添加到作为随机数获得的结果集中,然后选择按该列排序的前50个列。这会给你一个随机的样本。
例如:
SELECT TOP 50 *, RAND(Id) AS Random
FROM SourceData
ORDER BY Random其中SourceData是源数据表或视图。顺便说一句,这里假设使用SQL Server 2008上的T-SQL。它还假设您的数据源上有一个Id列,该列具有唯一的Id。如果您的it是非常小的数字,在将其传递给RAND之前,最好将其乘以一个大整数,如下所示:
RAND(Id * 10000000)https://stackoverflow.com/questions/3078964
复制相似问题