2013-10-11 5 views
1

Моя цель состоит в том, чтобы использовать отдельные столбцы, но возвращать все столбцы.Выберите один из столбцов, но верните все столбцы

Моя таблица как этот

id, name, year 

1, John, 2012 

2, Jake, 2012 

3, Jenna, 2013 

1, John, 2013 

мне нужно сделать отчетливый столбца идентификаторов и возвращает все три колонки, а также не одинаковые идентификаторы, мне нужно самой последней записи.

Выход мне нужно

id, name, year 

1, John, 2013 

2, Jake, 2012 

3, Jenna, 2013 

Я попробовал эти две команды

  1. выбрать отличный идентификатор, название, год от sampletable. Я сделаю отчетливым на всех строках.

  2. select * from sampletable group по id Я верну только столбец id и отброшу другие столбцы.

ответ

0

Используя оконные и аналитические функции можно разделить данные по упорядочению ид в году, и выбрать первый результат:

SELECT id, name, year 
FROM 
(SELECT id, name, year, row_number() over (partition by id order by year desc) as r 
    FROM sampletable) S 
WHERE S.r = 1; 

Плюс есть другие функции ранжирования, такие как rank и dense_rank для разных вариантов.

0

без аналитических функций

 
    select t.id, t.name, t.year from t 
    join 
     (select id, max(year) year from t group by id) as S 
     on S.id=t.id and S.year = t.year 

;

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