题
<强>问题:强>坐标纬度/ LNGS的表。两排都可能有相同的坐标。我们希望返回(返回集合内)的一组独特的坐标行的查询。需要注意的是distinct
是不可用的,因为我需要返回id列其中,顾名思义,是不同的。这类作品(@maxcount
是我们所需要的行数,intid
是一个独特的INT ID列):
select top (@maxcount) max(intid)
from Documents d
group by d.geoLng, d.geoLat
这将始终返回同一行给定的坐标不幸的是,这是我使用的耻辱位。如果我们有一个rand()
聚集,我们可以用它代替max()
......注意,你不能使用max()
与newid()
创建的GUID。
任何想法? (有一些更多的背景在这里,如果你有兴趣: HTTP:// WWW .itu.dk /〜friism /博客/ p = 121 )
UPDATE:完全溶液这里
解决方案
您可能能够使用CTE为这个跨越纬度和长ROW_NUMBER函数,然后使用兰特()针对。是这样的:
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)
这将始终返回第一组的纬度和LNGS,我一直没能做出顺序是随机的。也许有人可以继续使用这种方法。它会给你虽然匹配纬度和经度的组合内的随机行。
如果我有更多的时间后,我会尽量让周围的最后一个障碍。
其他提示
这并不为你工作?
select top (@maxcount) *
from
(
select max(intid) as id from Documents d group by d.geoLng, d.geoLat
) t
order by newid()
你在哪里买的DISTINCT仅适用于一列的想法?无论如何,你也可以使用GROUP BY子句。
不隶属于 StackOverflow