Limits in subqueries...
От | Martijn van Oosterhout |
---|---|
Тема | Limits in subqueries... |
Дата | |
Msg-id | 3950CE38.6816DC22@cupid.suninternet.com обсуждение исходный текст |
Ответы |
Re: Limits in subqueries...
|
Список | pgsql-general |
I have a (simplified) table looking like: serial int4 custid int4 stamp datetime I want, for each customer, to get the serial of the the highest timestamp for that customer, and for duplicate timestamps, the highest serial. The way I thought how to do that would be: select custid, serial from test b where serial = (select serial from test a where a.custid = b.custid order by serial desc limit 1); but thats not allowed. The best I could do is: select custid, max(serial) from test where (custid,stamp) in (select custid, max(stamp) from test group by custid) group by custid; Which is ugly and only works in this case because max does what I want. It has a horrible plan though: Aggregate (cost=1.36 rows=11 width=8) -> Group (cost=1.36 rows=11 width=8) -> Sort (cost=1.36 rows=11 width=8) -> Seq Scan on test (cost=1.36 rows=11 width=8) SubPlan -> Aggregate (cost=1.36 rows=11 width=12) -> Group (cost=1.36 rows=11 width=12) -> Sort (cost=1.36 rows=11 width=12) -> Seq Scan on test (cost=1.36 rows=11 width=12) In the more general case, this won't work. Is there a better way of doing this? Does postgres 7.0 do better in this case? -- Martijn van Oosterhout <kleptog@cupid.suninternet.com> http://cupid.suninternet.com/~kleptog/
В списке pgsql-general по дате отправления: