Oracle SQL single distinct column



我想从下面的示例表中获得每个不同名称的单个记录,其中包含最近的日期。

我希望查询的结果是:

Mark    Checked_in  04-AUG-15  Blue
Dan     Checked_in  08-JUL-15  Yellow 

示例表:

Name    Action      Date       Color
Mark    Checked_in  04-AUG-15  Blue
Mark    Checked_in  02-AUG-15  Black
Dan     Checked_in  02-JUL-15  Orange
Dan     Checked_in  08-JUL-15  Yellow

WITH WithRN as (SELECT Name
        , Action
        , "Date"
        , Color
        , row_number() over (partition by Name order by "Date" desc) as RN
    FROM tableName)
SELECT Name, Action, "Data", Color
FROM WithRN
WHERE RN = 1
解析函数通常会比使用聚合连接到self执行得更好。

使用内联视图生成包含唯一值和最大日期值的子集。在这里,我假设Name,然后将其连接回基本集,以产生所有所需的列,并且在本例中仅产生有问题的记录max(date)。

SELECT A.Name, A.Action, A.Date, A.Color
FROM tableName A
INNER JOIN (SELECT name, max(date) MDate from tableName group by name) B
 on A.Name = B.Name and A. Date = B.MDate

这里假设每个名字的日期是唯一的。