Re: Complicated "group by" question
От | Andrew Perrin |
---|---|
Тема | Re: Complicated "group by" question |
Дата | |
Msg-id | Pine.LNX.4.53.0408251420470.20106@perrin.socsci.unc.edu обсуждение исходный текст |
Ответ на | Re: Complicated "group by" question (Josh Berkus <josh@agliodbs.com>) |
Список | pgsql-sql |
Excellent - thanks, Josh! ---------------------------------------------------------------------- Andrew J Perrin - http://www.unc.edu/~aperrin Assistant Professor of Sociology, U of North Carolina, Chapel Hill clists@perrin.socsci.unc.edu * andrew_perrin (at) unc.edu On Wed, 25 Aug 2004, Josh Berkus wrote: > Andrew, > > > I have a table of people ("reviewers"), a table of review assignments > > ("assign"), and a table of review acceptances ("accept"). I would like to > > be able to write a query to return the latest (e.g., max(assign_date)) > > assignment for each reviewer, plus the acc_id field from "accept". I > > think I should be able to do this with a GROUP BY clause, but am having no > > luck. > > Some vagueness: you didn't say whether you wanted to see two assignments if > they have the same, latest date. Nor did you specify whether you wanted to > see assignments that had not been accepted (the below assumes yes to both) > > Hmmm ... one way, SQL-standard: > > SELECT reviewer.name, assign_date, acc_id > FROM reviewers JOIN assign ON reviewer.id = assign.reviewer_id > LEFT OUTER JOIN accept ON assign.id = accept.assign_id > WHERE assign_date IN (SELECT max(ass2.assign_date) FROM assign ass2 > WHERE ass2.reviewer_id = reviewers.id) > > or for a bit faster execution on PG you cann replace that WHERE clause with: > > WHERE assign_date IN (SELECT ass2.assign_date FROM assign ass2 > WHERE ass2.reviewer_id = reviewers.id ORDER BY ass2.assign_date DESC LIMIT 1) > > -- > Josh Berkus > Aglio Database Solutions > San Francisco >
В списке pgsql-sql по дате отправления: