如何从多个列的SELECT DISTINCT中删除重复项?

时间:2017-12-06 12:25:02

标签: sql oracle select

我有以下select语句:

SELECT DISTINCT a.month, 
                a.date 
           FROM a 
       ORDER BY a.bar DESC NULLS LAST; 

月是char,date是日期。我需要使用日期列,因为这是我订购结果的东西。我得到了这个结果:

foo | bar

 x---|---20-nov-15 00:00:00  
 y---|---31-oct-15 00:00:00  
 y---|---30-oct-15 00:00:00  
 z---|---28-sept-15 00:00:00

我需要一个WHERE语句,从结果中消除重复的Y,我一直在寻找无法找到解决方案

3 个答案:

答案 0 :(得分:0)

您似乎想要GROUP BY

SELECT a.month, MAX(a.date)
FROM a 
GROUP BY a.month; 

答案 1 :(得分:0)

我的方式:(您不需要使用SELECT DISTINCT...

SELECT * FROM 
        (SELECT *
        ,ROW_NUMBER() OVER(PARTITION BY FOO
                                ORDER BY BAR DESC) AS RN
            FROM @RESULT) x
        WHERE RN = 1

您可以使用行号和分区将数据分隔为Foo,然后按降序Bar排序。 (您可以根据需要添加更多分区)

然后使用第1行来获取每个Foo

的最大日期

全力以赴:

DECLARE @RESULT TABLE
   ([Foo] CHAR(1)  ,[Bar] DATETIME)

INSERT   INTO @RESULT
         SELECT   'x', '2015-11-20T00:00:00'
INSERT   INTO @RESULT
         SELECT   'y', '2015-10-31T00:00:00'
INSERT   INTO @RESULT
         SELECT   'y', '2015-10-30T00:00:00'
INSERT   INTO @RESULT
         SELECT   'z', '2015-09-28T00:00:00'


SELECT * FROM 
        (SELECT *
        ,ROW_NUMBER() OVER(PARTITION BY FOO
                                ORDER BY BAR DESC) AS RN
            FROM @RESULT) x
        WHERE RN = 1

答案 2 :(得分:-1)

使用分组来解决此问题

SELECT a.month, a.date 
FROM a 
GROUP BY a.month 
ORDER BY a.bar DESC NULLS LAST;