내가 해결하려고하는 문제는 내가 다음과 같은 테이블을 가지고 있다는 것입니다.SQL - min()은 가장 낮은 값을 얻고 max()는 가장 높은 값을 얻습니다. 2 번째 (또는 5 번째 또는 n 번째) 최저값을 원하면 어떻게해야합니까?
a 및 b는 다른 테이블의 점을 참조하십시오. distance는 점 사이의 거리입니다.
| id | a_id | b_id | distance | delete |
| 1 | 1 | 1 | 1 | 0 |
| 2 | 1 | 2 | 0.2345 | 0 |
| 3 | 1 | 3 | 100 | 0 |
| 4 | 2 | 1 | 1343.2 | 0 |
| 5 | 2 | 2 | 0.45 | 0 |
| 6 | 2 | 3 | 110 | 0 |
....
중요 한 열은 a_id입니다. 나는 각각의 옷장 B를 유지하고 싶었다면, 나는 이런 식으로 뭔가를 할 수 :
| id | a_id | b_id | distance | delete |
| 1 | 1 | 1 | 1 | 0 |
| 5 | 2 | 2 | 0.45 | 0 |
....
내가 각각 하나의 행이 필요 예 :
update mytable set delete = 1 from (select a_id, min(distance) as dist from table group by a_id) as x where a_gid = a_gid and distance > dist;
delete from mytable where delete = 1;
나에게이 같은 결과 테이블을 줄 것이다 값은 a_id이며, 해당 행은 각 a_id에 대해 가장 낮은 거리 값을 가져야합니다.
그러나 각 a_gid에 대해 10 개의 가장 가까운 점을 유지하려고합니다. plpgsql 함수를 사용하여이 작업을 수행 할 수 있지만 더 많은 SQL-y 방법이 있으면 궁금합니다.
min() 및 max()가 nth()와 같은 집계 함수가있는 경우 가장 작은 값과 가장 작은 값을 반환합니다. 위와 비슷한 방식으로이 작업을 수행 할 수 있습니다.
저는 PostgeSQL을 사용하고 있습니다.
Postgres에는이 Functon이 없지만 올바른 길을 가고 있습니다. 제안이 도움이되어 답을 찾을 수 있습니다. – Rory
이제 PostgreSQL 9.1에는 Window Functions 내에 rank() 함수가 있습니다. http://www.postgresql.org/docs/9.1/static/tutorial-window.html – Stefan