LINUX.ORG.RU

туплю с простым sql запросом на группировку

 


0

1

есть таблица bugs с полями id (primary key), project_id (foreign key -> project.id) и created_at (date). Нужно вытащить последний баг в каждом проекте, т.е. получить на выходе что-то вроде:

project_id: 10, id: 15, date: 2012-10-10

project_id: 11, id: 25, date: 2012-10-12

как реализовать такой запрос?

★★

Последнее исправление: Goganchic (всего исправлений: 1)

Может, как-то так:

select bugs.* from bugs
  inner join (select project_id, max(created_at) as created_at from bugs group by project_id) last_bugs 
    ON last_bugs.project_id=bugs.project_id and last_bugs.created_at=bugs.created_at

Slavaz ★★★★★
()

а так не пойдёт

select * from test.bugs as b1
	where b1.created_at = (select MAX(b2.created_at) from test.bugs as b2 where b1.project_id = b2.project_id);
vtVitus ★★★★★
()

В Oracle можно так:

 select *
 from   project p join
        ( select *
          from   ( select *
                   from   bugs bb
                   where  bb=p.id
                   order by bb.created_at
                 ) xxx
          where rownum=1
        ) yyy on p.id=yyy.project_id

А вообще vtVitus показал универсальный вариант для любой СУБД.

dmitryalexeeff
()
Последнее исправление: dmitryalexeeff (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.