2013-09-30 2 views
0

지난 8 시간 동안이 쿼리에 어려움을 겪고 있습니다!. 아래는 달성하려는 것입니다. 당신이 나에게 지시하거나 아래에 실종 된 것을 정정 할 수 있다면, 좋을 것입니다.중복 컬럼 결과가 두 개의 열로 표시됩니다.

SELECT가

이 쿼리 B BY B = 2, C = 2 그룹, C 위해 날짜 DESC로 TBL FROM 입니다 * :

A, B, C, Date 
    -------------- 
    1 2 3 1 
    2 3 2 2 
    3 2 4 3 
    4 2 9 4 
    5 3 4 5 
    6 4 9 6 
    7 4 3 7 

내 쿼리

나에게 중복 가치를 부여했다. B = 2 또는 C = 2 인 경우, B = 2 또는 C = 2의 경우 1 행만 원할 경우 결과 행 2 개를 필터링하여 마지막 행만 필터링합니다. 여과는 날짜 란에 의해 행해져 야합니다.

A, B, C, Date (Query output!) 
-------------- 
1 2 3 1 
2 3 2 2 
3 2 4 3 
4 2 9 4 

예상 출력 : 사전에

A, B, C, Date (Expected output!) 
-------------- 
1 2 3 1 (skip this row, because the next row is the latest row! and it contains 2) 
2 3 2 2 (show this row for B=2 or C=2 instead of the above row) 
3 2 4 3 
4 2 9 4 

감사합니다! 그는 자신의 쿼리에서`ORDER BY`있다 @mvp

+0

하나의 방법입니다. –

+0

질문 : 예상 결과에서 마지막 행이 표시되지 않고 이전 행이 표시되지 않는 이유는 B = 2이고 날짜가 최대이기 때문입니다. – AgRizzo

+0

@AgRizzo 다음 출력을 기다리고 있습니다.'2 3 2 2 | 4 2 9 4 | 3 2 4 3 | 4 2 9 4 '. 2는 조건 B = 2 또는 C = 2 일 때 4와 3 후에 가장 큰 날짜가됩니다. – Allroundstart

답변

0

여기 ...

SELECT m.* 
    FROM my_table m 
    JOIN 
     (SELECT B 
      , C 
      , MAX(Date) max_date 
      FROM 
      (SELECT B,C,Date FROM my_table WHERE B = 2 
       UNION 
       SELECT C,B,Date FROM my_table WHERE C = 2 
      ) x 
     GROUP 
      BY B 
      , C 
     ) n 
     ON ((n.b=m.b AND n.c=m.c) OR (n.b=m.c AND n.c=m.b)) 
    AND n.max_date = m.date; 
+0

감사합니다. 이걸 해냈어. 이거 공부할거야. – Allroundstart

관련 문제