2013-09-30 48 views
0

自從過去8小時以來,我一直在爲這個查詢而努力!下面是我試圖實現的。如果你能指導我或糾正我下面所缺少的東西,那會很好。在兩列中過濾重複列結果Mysql

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 

我的查詢:

SELECT * FROM TBL WHERE B = 2或C = 2 GROUP BY B,C 爲了通過日期降序

此查詢是給我重複的價值。我想看到的是,如果B = 2或C = 2,我只想爲B = 2或C = 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 

提前感謝!

+0

@mvp他'他查詢順序BY'。 –

+0

問題:在預期的輸出中,爲什麼不顯示最後一行並且沒有以前的行,因爲在它中,B = 2並且日期最大? – AgRizzo

+0

@AgRizzo我期待以下輸出'2 3 2 2 | 4 2 9 4 | 3 2 4 3 | 4 2 9 4'。 2將是4和3之後條件B = 2或C = 2的最大日期。 – 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