<强>问题:坐标纬度/ 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子句。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top