0

自过去 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 * FROM Tbl WHERE B=2 or C=2 GROUP BY B, C order by Date 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

提前致谢!

4

1 回答 1

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;
于 2013-09-30T13:07:57.843 回答