问题: 经纬度坐标表。两行可能具有相同的坐标。我们想要一个查询,该查询返回一组具有唯一坐标的行(在返回的行内)。请注意,这distinct是不可用的,因为我需要返回根据定义不同的id列。这类工作(@maxcount是我们需要的行数,intid是唯一的intid列):
distinct
@maxcount
intid
select top (@maxcount) max(intid) from Documents d group by d.geoLng, d.geoLat
不幸的是,对于给定的坐标,它将始终返回同一行,这对我来说有点可惜。如果只有rand()聚合,则可以使用max()…来代替。请注意,您不能将其max()与一起使用newid()。
rand()
max()
newid()
有任何想法吗?(如果您感兴趣的话,这里还有更多背景知识:http : //www.itu.dk/~friism/blog/ ?p= 121)
更新:完整的解决方案在这里
您可以通过lat和long的ROW_NUMBER函数为此使用CTE,然后对它使用rand()。就像是:
WITH cte AS ( SELECT intID, ROW_NUMBER() OVER ( PARTITION BY geoLat, geoLng ORDER BY NEWID() ) AS row_num, COUNT(intID) OVER (PARTITION BY geoLat, geoLng) AS TotalCount FROM dbo.Documents ) SELECT TOP (@maxcount) intID, RAND(intID) FROM cte WHERE row_num = 1 + FLOOR(RAND() * TotalCount)
这将始终返回第一组lat和lngs,但我无法将顺序随机化。也许有人可以继续使用这种方法。但是,它将在匹配的经纬度组合中为您提供随机行。
如果我以后有更多时间,我将尽力解决最后的障碍。