Zobrazit příspěvky

Tato sekce Vám umožňuje zobrazit všechny příspěvky tohoto uživatele. Prosím uvědomte si, že můžete vidět příspěvky pouze z oblastí Vám přístupných.


Příspěvky - Václav Lešek

Stran: [1]
1
Server / Re:Oracle: pomoc s SQL dotazem
« kdy: 03. 03. 2014, 21:46:50 »
a co treba
select q.* from (select * from tabulka2 order by datum) q where ROWNUM = 1
tohle musi fungovat urcite, akorat to teda nebude moc efektivni. Ty joiny si uz udelej sam....

toto vrati len jeden zaznam pre vsetko, to nie je dobre.

Podle mě to bylo myšlené jako korelovaný poddotaz, ale ten join si tam musíte doplnit, třeba takhle:

select q.* from (select * from tabulka2 where tabulka1.t1_id=tabulka2.t1_id order by datum) q where ROWNUM = 1

Stejně pořád vrátíte jen jeden záznam. Nebo nevím kam míříte.

2
Server / Re:Oracle: pomoc s SQL dotazem
« kdy: 03. 03. 2014, 21:44:05 »
to Vaclav Lesek:

vase riesenie funguje. Zial nie som este taky skuseny v SQL. Mohli by ste mi prosim vas vysvetlit, co to "over partition by" znamena? Rad by som to pochopil a nieco nove sa naucil.
dakujem
Omlouvám se, nějak jsem zapomněl sledovat tento thread. Pokud vám nepomohl odkaz od Pavla, kdyžtak se ozvěte.

3
Server / Re:Pomoc s SQL dotazom - ORACLE
« kdy: 20. 02. 2014, 08:56:38 »

A co pokud nebude table2.ins_date unikátní? Pak by možná bylo lepší vrátit všechny relevantní záznamy:


Autor původně specifikoval, že chce jen první nalezený, to už záleží na přesnějším zadání jaký z nich pak použít či zda by vyhohoval postup zobrazit všechny relevantní jak píšete. Aspoň si teď může vybrat :)

4
Server / Re:Pomoc s SQL dotazom - ORACLE
« kdy: 19. 02. 2014, 22:06:31 »
Jakou máte verzi DB? Následující postup myslím funguje až od 10g. Také nevím, jaké mají být joiny, t.j. zda se má jméno zobrazit, když nejsou data v dalších tabulkách atd., takže jsme všude použil inner join čili každý záznam z t1 tabulky musí mít odpovídající záznam v dalších tabulkách.

Vytvořil jsem tři testovací tabulky:
Kód: [Vybrat]
create table table1 (
  t1_id number,
  name varchar2(20)
  );
 
create table table2 (
  t2_id number,
  t1_id number,
  address varchar2(20),
  ins_date date
  );
 
create table table3 (
  t3_id number,
  t1_id number,
  something varchar2(20)
);

Obsahují tyto záznamy:
select * from table1;
T1_ID NAME               
----- --------------------
    1 JOHN                 
    2 ADRIAN               
    3 VACLAV               

select * from table2;
T2_ID T1_ID ADDRESS              INS_DATE
----- ----- -------------------- --------
    1     1 NEW YORK             24.10.13
    2     1 CHICAGO              23.09.13
    3     1 SAN FRANCISCO        23.11.13
    4     2 DORTMUND             01.01.12
    5     2 MUNCHEN              01.02.11

select * from table3;
T3_ID T1_ID SOMETHING         
----- ----- --------------------
    1     1 MERCEDES             
    2     1 HONDA               
    3     2 BMW                 
    3     2 AUDI                 
    3     2 HONDA


Váš požadavek by mohl splnit snad následující select:
Kód: [Vybrat]
select t1.name, t2.address, t3.something from table1 t1
inner join (select tmp.*, row_number() over (partition by tmp.t1_id order by tmp.ins_date asc) rn from table2 tmp) t2 on t1.t1_id = t2.t1_id and rn = 1
inner join table3 t3 on t3.t1_id = t1.t1_id

Výsledek:
NAME                 ADDRESS              SOMETHING         
-------------------- -------------------- --------------------
JOHN                 CHICAGO               MERCEDES             
JOHN                 CHICAGO               HONDA               
ADRIAN              MUNCHEN              BMW                 
ADRIAN              MUNCHEN              AUDI                 
ADRIAN              MUNCHEN              HONDA   


Pokud byste potřeboval poslední adresu, stačí místo ASC použít DESC. Snad jsem pochopil zadání správně, kdyžtak dejte vědět a zkusíme to ještě poupravit.

5
Server / Re:Pomoc s SQL dotazom - ORACLE
« kdy: 19. 02. 2014, 21:58:03 »
Mám pocit, že tazatel potřebuje ke každému jménu je ho první (či poslední adresu) + detaily z třetí tabulky. Podle postupů viz výše se vyberou podle mého názoru jen jedno jméno s adresou + detaily. Kde jsou ostatní jména?

Stran: [1]