2012-05-06 3 views
1

대용량 CSV 파일을 테이블로 가져 왔습니다. 테이블의 샘플 내가 일치하는 점과 필드 값을 마우스 오른쪽 눈과 왼쪽 눈 "감도 * 10"값을 비교하고 추출해야이열 값을 비교하는 테이블 행을 비교하는 SQL 쿼리

name,  eye,point,field,date,seconds,sensitivity*10,slope,intercept,T*1000 

NESSA SONIA ,R,6,4,08-04-09,32658845,160,1.062300e+001,62538, 1282 
NESSA SONIA ,R,6,5,20-05-09,36288632,20, 5.360101e+000,64036, 771 
NESSA SONIA ,R,6,6,02-12-09,53223062,60, 3.425260e+000,64590, 767 
NESSA SONIA ,L,6,4,08-04-09,32658922,230,4.629489e+000,64382, 582 
NESSA SONIA ,L,6,5,20-05-09,36288515,170,2.805373e+000,64901, 511 
NESSA SONIA ,L,6,6,02-12-09,53223059,220,3.528252e+000,64694, 1022 

처럼 보이는 (내가 행을 의미) 최고.

예를 들어 포인트, 필드 및 날짜가 동일하고 감도가 가장 높기 때문에 네 번째를 추출해야하므로 첫 번째 행과 네 번째를 비교해야합니다. 나는 거대한 파일을 가지고 있으며 모든 값을 추출해야합니다. 누구나 SQL 쿼리에 도움을 주시면 대단히 감사하겠습니다.

+0

나는 왼쪽과 맞 분리 한 t 개의 눈을 두 개의 테이블 table l과 table r에 집어 넣고 null이 아닌 값을 얻습니다 ('table l'. * from table l' , 여기서'table l'). '감도 * 10'> 10) 노조 ('table r'. * from'table r' 여기서'table r'.'sensitivity * 10'> 10) 그러나 다음을 사용하여 필드를 비교하고 추출하면 가입, 그 날 데카르트 제품을주는 – user1375481

답변

1
(select `table l`.* from `table l`, `table r` 
where `table l`. `sensitivity*10` > 10 and `table l`.`sensitivity*10`>`table r`.`sensitivity*10`) 

union 

(select `table r`.* from `table r`, `table l` 
where `table r`. `sensitivity*10` > 10 and `table r`.`sensitivity*10`>`table l`.`sensitivity*10`) 
+0

나는 두 테이블 왼쪽과 오른쪽으로 구분 하고이 쿼리를 사용 .. 그것을 알아 냈어 .. 감사합니다 피터슨. 그리고 블루 피트 – user1375481

0

SQL MAX() 함수와 GROUP BY 이름을 사용해야합니다. 이 같은

시도 뭔가 : SQL Group by & Max

+0

죄송합니다, 그것은 작동하지 않았다, 그것은 나에게 포인트와 필드가 같은 하나의 행을 주었다. 하지만 포인트 필드와 날짜가 같은 왼쪽 눈과 오른쪽 눈 (감도 값)을 비교해야합니다. 이미지의 첫 번째와 네 번째 행을 관찰하십시오. – user1375481

+0

여전히 쿼리는 동일한 포인트와 필드를 가진 행을 표시하지만 다른 행과 비교하지 않습니다. – user1375481

+0

예, MAX()는 전반적인 '최대'를 얻습니다. 그래서 한 행만 반환됩니다. 나는 각 개인에 대해 '최대'를 얻는 방법을 파악하려고 아직도 노력하고있다. 아마'MAX (감도 * 10)'가 어딘가에 하위 쿼리로 옮겨 져야 할 필요가있을 것입니다. 나는 최선을 다하고 있지만 SQL에서는 미안하지만 ... –

0

나는이 작동해야한다고 생각 : 또한

SELECT * 
FROM (
    SELECT point, field, MAX(sensitivty*10) AS max 
    FROM table 
    GROUP BY 
      name 
    ) tbl 
JOIN table 
ON  table.point = tbl.field 

는, 하나의에 쿼리 비슷한이있는 A는 당신이 관심이에이 다른 유래 Q &보고 당신은 :

select if(t1.sensitivity*10 > t2.sensitivity*10,t1.sensitivity*10,t2.sensitivity*10) as col1 
from table t1 
inner join table t2 
    on t1.field = t2.field 
    and t1.point = t2.point 
    and t1.date = t2.date 
where t1.eye ='R' and t2.eye ='L' 
+0

작동하지 않았습니다. 그것은 나에게 NULL 행을주고있다 – user1375481

+0

@bluefeet 나는 쿼리가 정확하지 않다고 생각한다. 나는 당신의 쿼리에서'field = point'를보고 있지 않다. 조언 해 줄 수 있니? 감사합니다 –

+0

R과 L 눈이 자신의 테이블에있는 경우'WHERE' 절을 제거하는 방법은 무엇입니까? –

관련 문제