I am trying to write a loop that returns max(lead)
for each opp
. Right now, I am just returning a row of nulls. What am I doing wrong?
This is my table:
CREATE TEMP TABLE mytable (
opp text
, pty_id text
, lead int);
INSERT INTO mytable VALUES
('A', '01', 1)
,('A', '01', 2)
,('A', '01', 3)
,('B', '01', 1)
,('B', '01', 2)
,('B', '01', 3)
,('C', '02', 4)
,('C', '02', 5)
,('D', '01', 1)
,('D', '01', 2)
,('D', '01', 3);
Here is the function:
DROP FUNCTION grp_prod();
CREATE OR REPLACE FUNCTION grp_prod()
RETURNS TABLE (
opp text
, pty_id text
, lead int
, result int) AS
$BODY$
DECLARE
r mytable%ROWTYPE;
BEGIN
opp := $1;
pty_id := $2;
lead := $3;
result := null;
FOR r IN
SELECT *
FROM mytable m
ORDER BY m.opp, m.lead
LOOP
IF (r.opp, r.lead) <> (opp, lead) THEN
RETURN NEXT;
opp := r.opp;
lead := r.lead;
result := 1;
END IF;
result := MAX(lead);
END LOOP;
RETURN NEXT;
END;
$BODY$ LANGUAGE plpgsql STABLE;
select * from grp_prod();
I really appreciate any help you can provide here. Please let me know if you have any further questions if my requirements are unclear.