Advertisement
cmptrwz

Track last circ month

Nov 18th, 2014
240
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. CREATE TABLE IF NOT EXISTS extend_reporter.last_circ_month (
  2. id integer NOT NULL PRIMARY KEY, -- No FK intentionally because this isn't all that important to go away if the user does
  3. circ_month date
  4. );
  5.  
  6. INSERT INTO extend_reporter.last_circ_month(id, circ_month) SELECT usr, max(date_trunc('month', xact_start)) FROM action.circulation GROUP BY usr;
  7.  
  8. CREATE OR REPLACE FUNCTION extend_reporter.record_last_circ_month() RETURNS trigger AS $func$
  9. BEGIN
  10.     UPDATE extend_reporter.last_circ_month SET circ_month = GREATEST(circ_month, date_trunc('month', NEW.xact_start)) WHERE id = NEW.usr;
  11.     IF NOT FOUND THEN
  12.         INSERT INTO extend_reporter.last_circ_month(id, circ_month) VALUES (NEW.usr, date_trunc('month', NEW.xact_start));
  13.     END IF;
  14.     RETURN NEW;
  15. END;
  16. $func$
  17. LANGUAGE plpgsql;
  18.  
  19. CREATE TRIGGER action_circulation_last_circ_month_trigger AFTER INSERT ON action.circulation FOR EACH ROW EXECUTE PROCEDURE extend_reporter.record_last_circ_month();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement