2013-07-11 1 views
2

У меня есть таблица, в которой мы будем называть таблицу: таблицу (ID: целое число, PID: целое, конец: даты и времени)Как я могу выбрать запись с последней датой в каждой группе

, который имеет следующие данные:

table: 
id pid end 
1  1  1 
2  1  2 
3  1  3 
4  2  11 
5  2  12 
6  2  13 
7  3  21 
8  3  22 
9  3  23 
10 4  31 
11 4  32 
12 4  33 

Что мне нужно сделать, это выбрать идентификаторы записей, сгруппированных по PID, с самым высоким конечным значением. Мой выход (как ActiveRecord :: Relation) должен быть следующим:

[#<Table id: 3, pid: 1, end: 3>, 
#<Table id: 6, pid: 2, end: 13>, 
#<Table id: 9, pid: 3, end: 23>, 
#<Table id: 12, pid: 4, end: 33>] 

Любое направление вы можете дать мне наиболее высокую оценку.

ответ

0

это должно сделать работу

select `id` , `pid` , `end` from table1 
    where `end` in (select max(`end`) from table1) 

DEMO HERE

Благодаря вашей предложить попробовать этот редактировать:

 select `id` , `pid` , `end` from 
    (select max(id) id ,`pid` ,max(`end`) as `end` from table1 group by `pid`)t 

DEMO HERE

+0

Я думаю, что это будет работать, но я заметил, что проблема в формулировке моего вопроса. На практике конечное значение в каждой группе не будет одинаковым. Я отредактирую свой вопрос для объяснения этого. Благодаря! – TheCulprit

0

Это должно работать, даже если ваш max end не всегда соответствует макс. id, а если есть несколько id с таким же максимальным end.

SELECT t1.id, t1.pid, t1.end FROM Table1 t1 
JOIN 
(SELECT pid AS 'pid2', MAX(end) AS 'end2' FROM Table1 GROUP BY pid) t2 
ON t2.pid2=t1.pid AND t2.end2=t1.end 
#GROUP BY t1.pid #in case there are several records with same 'pid' and 'end' and you want to select any one of those 

SQL Fiddle

0
select * from 
(select id,pid,end from Table1 order by pid asc, end desc) abc 
group by pid; 

fiddle