过滤重复列结果在两列Mysql中

时间:2013-09-30 09:48:00

标签: mysql sql

自从过去8小时以来,我一直在努力解决这个问题!以下是我想要实现的目标。如果你可以指导我或纠正我下面遗漏的内容,那就太好了。

  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 *   来自Tbl   其中B = 2或C = 2   GROUP BY B,C   按日期排序DESC

此查询为我提供了重复值。我想看到的是,如果B = 2或C = 2,我只想要B = 2或C = 2只有1行,并且还要将两个结果行过滤到最后一行。过滤应按日期栏进行。

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

提前致谢!

1 个答案:

答案 0 :(得分: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;