2014-07-16 1 views
0
------------------------------------------ 
    ID  Name  C  D 
------------------------------------------ 
    1  AK-47  10 5 
    2  RPG  10 20 
    3  Mp5  20 15 
    4  Sniper  20 18 
    5  Tank  90 80 
    6 Space12  90 20 
    7  Rifle  90 110 
    8  Knife  90 85 

그래서 내가 지혜로운 D 열이 C 컬럼에 가까운 낮은 숫자를 보유하고있어 어떤 것을 행 그룹을 얻을 필요가 1,2 ; 3,4 ; 5,6,7,8 별도의 그룹으로 고려해야D 행만 가져 오는 방법 C 열에 가장 가까운 가장 가까운 번호를 열에 저장 하시겠습니까?

그래서 예상 된 결과는 다음과 같습니다

------------------------------------------ 
    ID  Name  C  D 
------------------------------------------ 
    1  AK-47  10 5 
    4  Sniper  20 18 
    8  Knife  90 85 

어떻게해야합니까?

답변

1

다음은이 작업을 수행하는 다른 방법에 대한 구문입니다. 이것은 cte를 사용하고 기본 테이블을 한 번만 치게됩니다.

with MySortedData as 
(
    select ID, Name, C, D, ROW_NUMBER() over(PARTITION BY C order by ABS(C - D)) as RowNum 
    from Something 
) 

select * 
from MySortedData 
where RowNum = 1 
2
select t1.* 
from your_table t1 
join 
(
    select c, min(abs(c-d)) as near 
    from your_table 
    group by c 
) t2 on t1.c = t2.c and abs(t1.c-t1.d) = t2.near 
+0

이 반환 행은 가장 가까운 숫자가 가장 가까운 번호입니까? , 가장 가까운 낮은 번호가 필요합니다.이 querry가 트릭을합니까? –

+0

왜 그냥 해보지 않으시겠습니까? –

+0

min (abs (c-d)) 함수로 인해 의심 스러웠습니다. 좋아, 내가 그것을 시도하고 알려 드리겠습니다. –