Unix Technical Forum

Re: "How do I ..." SQL question

This is a discussion on Re: "How do I ..." SQL question within the pgsql Sql forums, part of the PostgreSQL category; --> Hi there: Thank you for the response, which gave me what I wanted. Here is a follow-up question.. First ...


Go Back   Unix Technical Forum > Database Server Software > PostgreSQL > pgsql Sql

Register FAQ Members List Calendar Search Today's Posts Mark Forums Read
  #1 (permalink)  
Old 04-19-2008, 10:53 AM
zeus@ix.netcom.com
 
Posts: n/a
Default Re: "How do I ..." SQL question

Hi there:

Thank you for the response, which gave me what I wanted.
Here is a follow-up question..

First a recap:

Table a contains the names of individuals, the places
they have visited and the year in which they were visited.

Let's see who has visited where and when:

SELECT * FROM a;

name place year
------ ------- ------
kim north 2004
kim south 2003
kim south 2003
bob west 2004
bob west 2004
bob west 2003
joe south 2004
joe south 2005
sue west 2004
bob east 2003
joe east 2004
joe east 2004
sue south 2004
bob north 2004
bob north 2005

Summarize data by number of places visited by year:

SELECT count(*) AS count, name, year FROM a
GROUP BY name, year
ORDER BY count DESC, name ASC;

count name year
------- ------ ------
3 bob 2004
3 joe 2004
2 bob 2003
2 kim 2003
2 sue 2004
1 bob 2005
1 joe 2005
1 kim 2004

Return only four rows beginning at second row into temporary table:

CREATE TEMPORARY TABLE output AS
SELECT count(*) AS count, name, year FROM a
GROUP BY name, year
ORDER BY count DESC, name ASC
LIMIT 4 OFFSET 1;

SELECT * FROM output;

count name year
------- ------ ------
3 joe 2004 s,e,e
2 bob 2003 w,e
2 kim 2003 s,s
2 sue 2004 s,w

Select only places visited included in LIMITed query:

SELECT DISTINCT a.place FROM a, output
WHERE a.name=output.name AND a.year=output.year;

place
-------
south
west
east


Here is the new question. I want to use the above result to update
another table which contains unique places visited and also has a field
to indicate recently visited places already present.

SELECT * FROM places;

refresh place
--------- -------
0 south
0 west
0 southwest

(The following two queries do not work right and are what I need help with)

Add new places:

INSERT INTO places (refresh, place)
SELECT DISTINCT 1, a.place FROM a, output
LEFT JOIN places ON places.place=a.place
WHERE a.name=output.name AND a.year=output.year
AND places.place IS NULL;

Update refresh flag for existing places. Note: the refresh field
can have one of several values and I only want to change it when
it has a particular value.

UPDATE places SET refresh=1
FROM output, a
WHERE places.refresh=0
AND places.place=a.place
AND a.name=output.name AND a.year=output.year;

(The last query never updates the places table
and I'm not sure how to do this)

I want this result:

SELECT * FROM places;

refresh place
--------- -------
1 south
1 west
0 southwest
1 east

Any help appreciated.

-Bob

---------------------------(end of broadcast)---------------------------
TIP 5: Have you checked our extensive FAQ?

http://www.postgresql.org/docs/faq

Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
Reply


Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On
Forum Jump


All times are GMT. The time now is 06:29 AM.


Powered by vBulletin® Version 3.6.5
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
www.UnixAdminTalk.com