sql >> Databasteknik >  >> RDS >> PostgreSQL

PostgreSQL-funktion för att iterera genom/agera på många rader med tillstånd

Tja, det här är knappast vackert men det är funktionellt:

select sum(amt) as session_val
from (
  select segment,
         max(segment) over() as max_segment,
         amt
  from (
    select sum(case when atype = 'SET' then 1 else 0 end)
               over(order by "order") as segment,
           amt
    from command
    where session = 2
  ) x
) x
where segment = max_segment

Det är dock ganska enkelt i PL/pgsql:

create function session_val(session int) returns int stable strict
language plpgsql as $$
declare
  value int := 0;
  rec command%rowtype;
begin
  for rec in select * from command where command.session = session_val.session loop
    if rec.atype = 'SET' then
      value := rec.amt;
    elsif rec.atype = 'ADD' then
      value := value + rec.amt;
    end if;
  end loop;
  return value;
end $$;

Så gör ditt val, antar jag.



  1. Kan jag kopiera :OLD och :NEW pseudo-poster i/till en Oracle-lagrad procedur?

  2. Behöver en MySQL-fråga för att välja från en tabell som lagrar nyckelvärdespar

  3. JavaScript Date Objects månadsindex börjar med 0

  4. Ge MySQL-användare bara de minsta privilegierna