view a parametry subselektu (PG 7.1) - vyreseno

Jiri Borik jiri.borik na volny.cz
Pondělí Listopad 4 05:41:49 CET 2002


On Thu, 31 Oct 2002, Jiri Borik wrote:

> Ahoj vespolek,
> 
> mam tabulku doklad(idd,...) a k ni tabulku zmen historie(idd,datum,popis). 
> Chci udelat pohled dkl, ktery obsahuje vsechna pole z doklad a datum a
> popis poslednich dvou zmen z historie. 
> 

Uz se mi to podarilo. Misto subselektu jsem pouzil funkci. Jine jednodussi
reseni jsem nenasel.

create function doklhist(text,int) returns text as '
declare ret text;
begin
        select into ret (datum::date)::text || '' '' || popis
                from historie where idd=$1
                order by datum desc limit 1 offset $2;
        return ret;
end;'
language 'plpgsql';

create view dkl as select *,
        doklhist(idd,0) as hist1,
        doklhist(idd,1) as hist2
from doklad;

> Pokud zapisu pozadovany vyber pro jedno cislo dokladu, vypada to takto:
> 
> select * from doklad,
> (select datum as dat1, popis as pop1 from historie where idd='2002A00002' 
> 	order by datum desc limit 1 ) as h1,
> (select datum as dat2, popis as pop2 from historie where idd='2002A00002'
> 	order by datum desc limit 1,1 ) as h2
> where idd='2002A00002';
> 
> To ale neni pro definci view pouzitelne. Jak zapsat obecne vazbu idd ze
> subselektu do hlavniho dotazu ? Zkousel jsem misto subselektu pouzit left
> outer join, ale tam zase nejde omezit pocet radek historie.
> 
> A jeste k optimalizaci view: 
> 
> Rekneme, ze udelam "select * from dkl where <podm>", kde <podm> lze
> vyhodnotit v puvodni tabulce doklad dle indexu.  Prevede se v ramci view
> podminka do dotazu pro doklad ?  Nedopadne to nahodou tak, ze se nejdrive
> udela "select * from doklad" a na kompletnim vyberu se spusti sekvencni
> vyber dle <podm> ? 
> 
> Jirka Borik <jiri.borik na volny.cz>




Další informace o konferenci Test