2009-08-27 2 views
0

나는 한 데이터베이스에서 다른 데이터베이스로 많은 데이터를 덤프하는 유지 관리 스크립트를 가지고 있습니다.IFNULL 내에서 가장 가까운 결과 얻기

내가 현재 행의 rank2로 얻을 시도하고있는 무슨

SELECT id, IFNULL(rank1,(SELECT rank2 
    FROM table 
    WHERE rank1 IS NOT NULL and 
     rank2<rank2 of current row 
    ORDER BY rank2 LIMIT 1)) FROM table 

로 데이터를 얻으려고는 rank1가 null가 아닌 가장 가까운 rank2입니다. 나는 rank1이 rank2의 효과적인 교체라고 가정하고있다.

그래서 나는 두 가지 문제가 있다고 생각한다.

  1. 내가 내가 내가 현재에 가장 가까운 rank2<rank2 가져 오기 '를 말하는 방법을 모르는 중첩 SELECT 문
  2. 에 사용되는 rank2 한 생각하지 않습니다. 0-150,000 범위 rank2

내가 0-20,000에서 Rank1 범위에 대해 가지고있는 값 및 (그 문제가 왜 확실하지 않다). 순위 사이에는 효과적인 상관 관계가 없습니다.

Rank1은 항상 신뢰할 수있는 그림이지만 null 인 경우가 많으므로이 유형의 대체품을 사용하여 주문을 퍼지하려고합니다. 여기

샘플 데이터의 비트가 나는 2,5,4,6,7,3,1,8,9,10의 순서 돌아갈 희망

 
id   rank1   rank2 
1    120,000   14,000 
2    120,000   18,420 
3    126,000   15,500 
4    85,000   NULL 
5    75,000   16,000 
6    70,000   15,700 
7    68,000   NULL 
8    42,000   NULL 
9    26,000   NULL 
10   21,500   8,000 

예제로 사용하는의 . 또는 그것에 가까운 것. 기본적으로 rank2에 null이 있으면 가장 가까운 rank1에 가장 가까운 rank2를 얻습니다.

나는 이것이 '완벽'하다고는 기대하지 않지만 rank1을 정렬하는 것보다 낫습니다.

답변

0

나는 당신이 무엇을 요구하고 있는지 확실하지 않습니다. 첫 번째 null이 아닌 값을 반환 할 COALESCE (rank1, rank2, rankX)를 사용할 수 있습니까?

+0

나는 그렇게 생각하지 않는다. 나는 모든 행을 얻으려고 노력하고있다. 그리고 내가 이해하는 것으로부터, COALESCE는 오직 첫 번째 non-null 값만을 줄 것이다. 가장 가까운 null이 아닌 값을 얻으려고합니다. 예제 데이터로 질문을 편집하고 있습니다. – pedalpete