vBulletin Search Engine Optimization
| |||||||
| Register | FAQ | Members List | Calendar | Search | Today's Posts | Mark Forums Read |
| ||||
| Hello SQL Aces ! I want to do a select on a table distinct on linkid and sorted by date. I have try this SELECT DISTINCT ON (linkid) * FROM all_links WHERE uid='2' AND DATE_TRUNC('day',read_date) = DATE_TRUNC('day', TIMESTAMP '2005-06-01') ORDER BY linkid, read_date; With this request "works" but the raws are sorted as I want. To have the rows sorted by date I have done this using a temporary table and that works exactly as I want. CREATE LOCAL TEMP TABLE temp_links WITHOUT OIDS AS SELECT DISTINCT ON (linkid) * FROM all_links WHERE uid='2' AND DATE_TRUNC('day',read_date) = DATE_TRUNC('day', TIMESTAMP '2005-06-01') ORDER BY linkid; SELECT * from temp_links ORDER BY read_date DESC limit 100 My question is... How can I do the same thing in the more efficient way and without using a temporary table. Since I am using PHP and the table is not deleted at the end of the program because PHP keeps the connection to the database open. Thanks for any suggestions. Fred ---------------------------(end of broadcast)--------------------------- TIP 2: you can get off all lists at once with the unregister command (send "unregister YourEmailAddressHere" to majordomo@postgresql.org) |
| |||
| how about (untested) select * from ( SELECT DISTINCT ON (linkid) * FROM all_links WHERE uid='2' AND DATE_TRUNC('day',read_date) = DATE_TRUNC('day',TIMESTAMP '2005-06-01') ORDER BY linkid ) A ORDER BY read_date DESC limit 100 ---------- Original Message ----------- From: FC <lne-1mc8@myamail.com> To: pgsql-general@postgresql.org Sent: Wed, 1 Jun 2005 16:40:48 +0200 Subject: [GENERAL] SQL question. > Hello SQL Aces ! > > I want to do a select on a table distinct on linkid and sorted by > date. I have try this > > SELECT DISTINCT ON (linkid) * FROM all_links > WHERE uid='2' AND DATE_TRUNC('day',read_date) = DATE_TRUNC('day', > TIMESTAMP '2005-06-01') ORDER BY linkid, read_date; > > With this request "works" but the raws are sorted as I want. To have > the rows sorted by date I have done this using a temporary table and > that works exactly as I want. > > CREATE LOCAL TEMP TABLE temp_links WITHOUT OIDS AS > SELECT DISTINCT ON (linkid) * FROM all_links > WHERE uid='2' AND DATE_TRUNC('day',read_date) = DATE_TRUNC('day', > TIMESTAMP '2005-06-01') ORDER BY linkid; > > SELECT * from temp_links ORDER BY read_date DESC limit 100 > > My question is... How can I do the same thing in the more efficient > way and without using a temporary table. Since I am using PHP and the > table is not deleted at the end of the program because PHP keeps the > connection to the database open. > > Thanks for any suggestions. > Fred > > ---------------------------(end of broadcast)--------------------------- > TIP 2: you can get off all lists at once with the unregister command > (send "unregister YourEmailAddressHere" to majordomo@postgresql.org) ------- End of Original Message ------- ---------------------------(end of broadcast)--------------------------- TIP 3: if posting/reading through Usenet, please send an appropriate subscribe-nomail command to majordomo@postgresql.org so that your message can get through to the mailing list cleanly |
| |||
| On Wed, Jun 01, 2005 at 04:40:48PM +0200, FC wrote: > > Hello SQL Aces ! > > I want to do a select on a table distinct on linkid and sorted by > date. I have try this How about a subquery?: SELECT * FROM ( SELECT DISTINCT ON (linkid) * FROM all_links WHERE uid='2' AND DATE_TRUNC('day',read_date) = DATE_TRUNC('day', TIMESTAMP '2005-06-01') ORDER BY linkid, read_date) AS sub ORDER BY read_date DESC limit 100; Hope this helps, > My question is... How can I do the same thing in the more efficient > way and without using a temporary table. Since I am using PHP and the > table is not deleted at the end of the program because PHP keeps the > connection to the database open. -- Martijn van Oosterhout <kleptog@svana.org> http://svana.org/kleptog/ > Patent. n. Genius is 5% inspiration and 95% perspiration. A patent is a > tool for doing 5% of the work and then sitting around waiting for someone > else to do the other 95% so you can sue them. -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.0.6 (GNU/Linux) Comment: For info see http://www.gnupg.org iD8DBQFCndUnY5Twig3Ge+YRAmMsAJ0cqkkhZ69vs56cHe575i vX84Ka+QCffxhD PmtBVPWjxg7BXhvooBJmFPI= =VEND -----END PGP SIGNATURE----- |
| ||||
| I need to remember to keep things simple... Works fine, thanks. Fred On Jun 1, 2005, at 5:20 PM, Jim Buttafuoco wrote: > how about (untested) > > select * > from > ( > SELECT DISTINCT ON (linkid) * > FROM all_links > WHERE uid='2' AND DATE_TRUNC('day',read_date) = DATE_TRUNC > ('day',TIMESTAMP '2005-06-01') > ORDER BY linkid > ) A > ORDER BY read_date DESC limit 100 > > > ---------- Original Message ----------- > From: FC <lne-1mc8@myamail.com> > To: pgsql-general@postgresql.org > Sent: Wed, 1 Jun 2005 16:40:48 +0200 > Subject: [GENERAL] SQL question. > > >> Hello SQL Aces ! >> >> I want to do a select on a table distinct on linkid and sorted by >> date. I have try this >> >> SELECT DISTINCT ON (linkid) * FROM all_links >> WHERE uid='2' AND DATE_TRUNC('day',read_date) = DATE_TRUNC('day', >> TIMESTAMP '2005-06-01') ORDER BY linkid, read_date; >> >> With this request "works" but the raws are sorted as I want. To have >> the rows sorted by date I have done this using a temporary table and >> that works exactly as I want. >> >> CREATE LOCAL TEMP TABLE temp_links WITHOUT OIDS AS >> SELECT DISTINCT ON (linkid) * FROM all_links >> WHERE uid='2' AND DATE_TRUNC('day',read_date) = DATE_TRUNC('day', >> TIMESTAMP '2005-06-01') ORDER BY linkid; >> >> SELECT * from temp_links ORDER BY read_date DESC limit 100 >> >> My question is... How can I do the same thing in the more efficient >> way and without using a temporary table. Since I am using PHP and the >> table is not deleted at the end of the program because PHP keeps the >> connection to the database open. >> >> Thanks for any suggestions. >> Fred >> >> ---------------------------(end of >> broadcast)--------------------------- >> TIP 2: you can get off all lists at once with the unregister command >> (send "unregister YourEmailAddressHere" to >> majordomo@postgresql.org) >> > ------- End of Original Message ------- > > > ---------------------------(end of broadcast)--------------------------- TIP 3: if posting/reading through Usenet, please send an appropriate subscribe-nomail command to majordomo@postgresql.org so that your message can get through to the mailing list cleanly |