2014-09-19 5 views
0

У меня есть пример таблицы, как это:Group по идентификатору и выбрать самые последние

date  id  status 
01/01/2013 55555 high 
01/01/2014 55555 low 
01/01/2010 44444 high 
01/01/2011 33333 low 

мне нужно в следующем порядке: group by id и выбрать самую последнюю дату.

Это результат, который я хочу.

date  id  status 
01/01/2014 55555 low 
01/01/2010 44444 high 
01/01/2011 33333 low 

Меня не волнует порядок рядов.

+0

@lurker: OP не хочет никакого статуса, но один из последней даты –

+0

Выбрать дату, идентификатор, статус от t1, (выберите id, max (date) maxdate group по id) как g1, где t1.id = g1.id и t1.date = g1.maxdate –

+0

ответ не комментарий :) – Jester

ответ

3

Вы должны присоединиться к столу подзапроса, что «ссылка» дата записи с наибольшей датой для каждого ID:

select a.* 
from your_table as a 
    inner join (
     select id, max(date) as max_date 
     from your_table 
     group by id 
    ) as b on a.id = b.id and a.date = b.max_date; 
+0

благодаря всем и особенно BARRANKA. Я применил ваше решение и хорошо работаю. – eric

2

Я думаю, что вы будете нуждаться в подзапросе, чтобы получить MAX (Дата) и затем внутреннее соединение. Попробуйте это:

SELECT A.[Date], A.[Id], A.[Status] 
FROM Table A 
INNER JOIN(SELECT Id, MAX([Date]) AS MaxDate 
FROM Table 
GROUP BY [Id]) B ON 
A.[Id] = B.[Id] AND 
A.[Date] = B.[MaxDate] 
0

--Возвращенной идентификатор группы и последнюю дату в этой группе

select id 
, MAX([date]) [latestDateInGroup] 
from tbl 
group by id 

--Возвращенной идентификатор группы и соответствующий статус и дату записи с последней датой в этой группе

select id 
, [status] [latestDateInGroup'sStatus] 
, [date] [latestDateInGroup] 
from 
(
    select id 
    , [status] 
    , [date] 
    , row_number() over (partition by id order by [date] desc) r 
    from tbl 
) x 
where x.r = 1 

--Возвращенная всех идентификаторов и статусов, вместе с последней датой в группе этой группы (требуется SQL 2012+)

select id 
, [status] 
, max([date]) over (partition by id order by [date] desc) [latestDateInGroup] 
from tbl 

SQL Fiddle в автономном режиме в данный момент; когда резервное копирование следующего код позволит вам построить таблицу, чтобы проверить вышеуказанные вопросы с http://sqlfiddle.com

create table tbl ([date] date, id bigint, [status] nvarchar(4)) 
go 

insert tbl select '2013-01-01', 55555, 'high' 
insert tbl select '2014-01-01', 55555, 'low' 
insert tbl select '2010-01-01', 44444, 'high' 
insert tbl select '2011-01-01', 33333, 'low' 
Смежные вопросы