Thread: ORDER BY and LIMIT with SubSelects

ORDER BY and LIMIT with SubSelects

From
Ron St-Pierre
Date:
I need to get 200 sets of the most recent data from a table for further
processing, ordered by payDate. My
current solution is to use subselects to:
1 - get a list of unique data
2 - get the 200 most recent records (first 200 rows, sorted descending)
3 - sort them in ascending order

SELECT SSS.* FROM
 (SELECT SS.* FROM
   (SELECT DISTINCT ON (nonUniqField)
    first, second, third, cost, payDate, nonUniqField
    FROM histdata
    WHERE userID = 19048 AND cost IS NOT NULL
   )
  SS
  ORDER BY SS.payDate DESC LIMIT 200
) SSS
ORDER BY payDate;

My question is in regards to steps 2 and 3 above. Is there some way that
I can combine both steps into one to save some time?

PostgreSQL 7.4beta2 on i686-pc-linux-gnu, compiled by GCC 2.95.4

Thanks
Ron



Re: ORDER BY and LIMIT with SubSelects

From
Bruno Wolff III
Date:
On Wed, Jan 21, 2004 at 09:18:18 -0800,
  Ron St-Pierre <rstpierre@syscor.com> wrote:
>
> My question is in regards to steps 2 and 3 above. Is there some way that
> I can combine both steps into one to save some time?

TIP 4: Don't 'kill -9' the postmaster
SELECT SS.* FROM
(SELECT DISTINCT ON (nonUniqField)
 first, second, third, cost, payDate, nonUniqField
 FROM histdata
 WHERE userID = 19048 AND cost IS NOT NULL
 ORDER BY nonUniqField, payDate DESC LIMIT 200
)
SS
ORDER BY payDate;