Oracle SQL 单个不同的列
Oracle SQL single distinct column
我想从下面的示例 table 中为每个不同的名称获取一条记录,其中包含最近的日期。
我希望查询的结果是:
Mark Checked_in 04-AUG-15 Blue
Dan Checked_in 08-JUL-15 Yellow
示例table:
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
使用内联视图生成包含唯一值和最大日期值的子集。这里我假设名称,然后将其连接回基础集以生成所有所需的列,并且仅生成在这种情况下记录有问题的 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
这假设每个名字的日期都是唯一的。
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
分析函数通常比使用聚合连接到自身执行得更好。
我想从下面的示例 table 中为每个不同的名称获取一条记录,其中包含最近的日期。
我希望查询的结果是:
Mark Checked_in 04-AUG-15 Blue
Dan Checked_in 08-JUL-15 Yellow
示例table:
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
使用内联视图生成包含唯一值和最大日期值的子集。这里我假设名称,然后将其连接回基础集以生成所有所需的列,并且仅生成在这种情况下记录有问题的 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
这假设每个名字的日期都是唯一的。
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
分析函数通常比使用聚合连接到自身执行得更好。