Hi.  I am having trouble getting the following to work.  Please find a 
complete cut-paste-run example below between the lines that 
demonstrates the problem.

_______________________________________________________

CREATE TABLE items (
        recdate         DATE,
        item            TEXT
);

CREATE TABLE summary (
        recdate         DATE,
        item            TEXT,
        hits            INTEGER
);

INSERT INTO items VALUES   ('1-1-2000', 'widget');
INSERT INTO items VALUES   ('1-1-2000', 'widget');
INSERT INTO items VALUES   ('1-1-2000', 'widget');
INSERT INTO summary VALUES ('1-1-2000', 'widget', 0);

UPDATE 
 summary
SET 
 hits = s.hits + 1 
FROM 
 summary AS s, 
 items   AS i 
WHERE 
 s.recdate = i.recdate  AND 
 s.item    = i.item;

SELECT
 recdate, item, hits
FROM
 summary;
_______________________________________________________


It outputs:

  recdate   |  item  | hits 
------------+--------+------
 2000-01-01 | widget |    1
(1 row)

But what I would rather it have shown is:

  recdate   |  item  | hits 
------------+--------+------
 2000-01-01 | widget |    3
(1 row)

...because I am trying to update each widget's number of instances 
for each day.

After playing around with this for a long time, trying to use 
variations of count, grouping etc, I can't work out how to do this 
efficiently.

There are several thousand widgets with several thousand 
instances, each day.  I have many differently structured widget 
tables, the above is just an example.  I would rather not add 
lengthy trigger statements to each if I can avoid it with a single 
neat solution, or a neat rule or something.

Do you have any suggestions for the best way to tackle this 
problem?  Can it be done with normal SQL or will I have to write a 
PLSQL function to do it?

Thanks in advance for any light you can shed.

Jason.



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

http://www.postgresql.org/users-lounge/docs/faq.html

Reply via email to