2015-08-06 4 views
0

Я хотел бы получить отдельную запись для каждого отдельного имени из приведенной ниже таблицы с самой последней датой.Одиночный столбец Oracle SQL

Я хотел бы надеяться на результат для запроса, чтобы дать:

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 

ответ

2
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 

Аналитические функции, как правило, будут лучше работать, а затем присоединяться к себе с помощью агрегата.

0

Используйте встроенное представление, чтобы сгенерировать подмножество, которое содержит уникальное значение и максимальное дату значение. Здесь я принимаю имя, а затем присоединяю его обратно к базовому набору, чтобы в этом случае получить все нужные столбцы и только указанную запись 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 

Это предполагает, что дата уникальна для каждого имени.

Смежные вопросы