Restrikce v databazi

Jan Serak sherry na pikebo.cz
Pondělí Listopad 25 08:07:58 CET 2002


"Karel Král" wrote:
> 
> Poradite mi jak co nejednoduseji resit nasledujici SELECT
> v tabulce :
> 
> User, Datum, Cena
> 
> Karel   21.10.2002    1000
> Pavel   21.10.2002    1200
> Eva     22.10.2002     1000
> Karel   01.11.2002    1100
> Vlado   01.11.2002    2000
> 
> Potrebuji vypsat aktulani ceny u vsech uzivatelu tj. klasicky select, ale s
> tim omezenim, ze u uzivatelu pro ktere existuje vice cen se uvede pouze ta
> nejnovejsi ?
> Tj. v pripade Karla  1100.
> 
> Dik, nejak me napadaji sama "slozita" reseni.


Nevim, jestli je to "slozite", ale jinak to asi nepujde:

select a.user,a.cena from <tabulka> a
  where (a.user,a.datum) in (select b.user,max(b.datum) from <tabulka> b
group by b.user)

Jednoduseji to v RDBMS nepujde. Musite totiz nejprve znat odpoved, ktere
zaznamy jsou aktualni pro kazdeho uzivatele, a pak teprve zjistovat ceny
v techto zaznamech.

Ale lze to zjednodusit: zmenit vyznam atributu datum ze "zacatek
platnosti" na
"konec platnosti". Tim padem to lze rovnou:

	select a.user,a.cena from <tabulka> a where a.datum is null;

Pokud potrebujete znat i zacatky platnosti, tak pouze pridate dalsi
sloupec
s datem ukonceni a uvedeny select jen lehce upravite, aby se zjistovala
NULLovost jineho sloupce ;-)

					Jan Serak

-- 
Mgr. Jan Šerák				PIKE ELECTRONIC, s. r. o.
mailto:jan.serak na pikebo.cz		IBC, Příkop 6
http://www.pikebo.cz			Brno, 602 00
phone:+420-5-45175088			Czech republic, Europe
SMS: mailto:sherry. na sms.paegas.cz
veřejný klíč: pgpk -a hkp://pks.pgp.cz/jan.serak@pikebo.cz
Fingerprint20 = 2FDB FDB0 2299 DA21 289F  6656 67C4 D4CC 1C82 60FA

Luck, that's when preparation and opportunity meet.
                -- P.E. Trudeau


Další informace o konferenci Databases