我已经计算了PostgresSQL中古代森林和最近森林之间的距离矩阵,感谢以下代码:
CREATE TABLE MatDist as (
SELECT
a.id a,
b.id b ,
st_distance(a.geom, b.geom) dist
FROM public.bvi_foret a, public.bvi_foret b
WHERE a.id != b.id AND a.ANC_FOR != b.ANC_FOR
)
它完美无缺。
我现在想要选择5对古森林(a)/最近的森林(b)来展示它们之间的最小距离。
所以我开始使用R,我可以找到呈现最小距离的唯一对,这要归功于以下代码:
DT <- data.table(df)
DT[ , .SD[which.min(dist)], by = a]
但是如何计算5对第一对呢?它可能很容易,在R中使用for循环或应用函数,但我找不到它......
提前感谢您的回答。
答案 0 :(得分:1)
使用纯SQL:
SELECT *
FROM MatDistMat
ORDER BY dist
LIMIT 5;
感谢您的回答,但我需要每个古代森林补丁的5对第一对FA / FR。
SELECT *
FROM (SELECT *, ROW_NUMBER() OVER(PARTITION BY a ORDER BY dist ASC) as rn
FROM MatDistMat) sub
WHERE sub.rn <= 5;