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 Test