abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 17:11 | Nová verze

    Byl vydán Nextcloud Hub 8. Představení novinek tohoto open source cloudového řešení také na YouTube. Vypíchnout lze Nextcloud AI Assistant 2.0.

    Ladislav Hagara | Komentářů: 0
    dnes 13:33 | Nová verze

    Vyšlo Pharo 12.0, programovací jazyk a vývojové prostředí s řadou pokročilých vlastností. Krom tradiční nadílky oprav přináší nový systém správy ladících bodů, nový způsob definice tříd, prostor pro objekty, které nemusí procházet GC a mnoho dalšího.

    Pavel Křivánek | Komentářů: 5
    dnes 04:55 | Zajímavý software

    Microsoft zveřejnil na GitHubu zdrojové kódy MS-DOSu 4.0 pod licencí MIT. Ve stejném repozitáři se nacházejí i před lety zveřejněné zdrojové k kódy MS-DOSu 1.25 a 2.0.

    Ladislav Hagara | Komentářů: 31
    včera 17:33 | Nová verze

    Canonical vydal (email, blog, YouTube) Ubuntu 24.04 LTS Noble Numbat. Přehled novinek v poznámkách k vydání a také příspěvcích na blogu: novinky v desktopu a novinky v bezpečnosti. Vydány byly také oficiální deriváty Edubuntu, Kubuntu, Lubuntu, Ubuntu Budgie, Ubuntu Cinnamon, Ubuntu Kylin, Ubuntu MATE, Ubuntu Studio, Ubuntu Unity a Xubuntu. Jedná se o 10. LTS verzi.

    Ladislav Hagara | Komentářů: 13
    včera 14:22 | Komunita

    Na YouTube je k dispozici videozáznam z včerejšího Czech Open Source Policy Forum 2024.

    Ladislav Hagara | Komentářů: 2
    včera 13:22 | Nová verze

    Fossil (Wikipedie) byl vydán ve verzi 2.24. Jedná se o distribuovaný systém správy verzí propojený se správou chyb, wiki stránek a blogů s integrovaným webovým rozhraním. Vše běží z jednoho jediného spustitelného souboru a uloženo je v SQLite databázi.

    Ladislav Hagara | Komentářů: 0
    včera 12:44 | Nová verze

    Byla vydána nová stabilní verze 6.7 webového prohlížeče Vivaldi (Wikipedie). Postavena je na Chromiu 124. Přehled novinek i s náhledy v příspěvku na blogu. Vypíchnout lze Spořič paměti (Memory Saver) automaticky hibernující karty, které nebyly nějakou dobu používány nebo vylepšené Odběry (Feed Reader).

    Ladislav Hagara | Komentářů: 0
    včera 04:55 | Nová verze

    OpenJS Foundation, oficiální projekt konsorcia Linux Foundation, oznámila vydání verze 22 otevřeného multiplatformního prostředí pro vývoj a běh síťových aplikací napsaných v JavaScriptu Node.js (Wikipedie). V říjnu se verze 22 stane novou aktivní LTS verzí. Podpora je plánována do dubna 2027.

    Ladislav Hagara | Komentářů: 0
    včera 04:22 | Nová verze

    Byla vydána verze 8.2 open source virtualizační platformy Proxmox VE (Proxmox Virtual Environment, Wikipedie) založené na Debianu. Přehled novinek v poznámkách k vydání a v informačním videu. Zdůrazněn je průvodce migrací hostů z VMware ESXi do Proxmoxu.

    Ladislav Hagara | Komentářů: 0
    včera 04:11 | Nová verze

    R (Wikipedie), programovací jazyk a prostředí určené pro statistickou analýzu dat a jejich grafické zobrazení, bylo vydáno ve verzi 4.4.0. Její kódové jméno je Puppy Cup.

    Ladislav Hagara | Komentářů: 0
    KDE Plasma 6
     (74%)
     (9%)
     (2%)
     (16%)
    Celkem 801 hlasů
     Komentářů: 4, poslední 6.4. 15:51
    Rozcestník

    Dotaz: SQL dotaz - 2 tabulky

    20.3.2013 21:37 Petr
    SQL dotaz - 2 tabulky
    Přečteno: 1004×
    potřebuji poradit, lze nějak vytvořit takový SQL dotaz? Mám MySQL tabulky TAB1(Rec Long primary key, Typ int) a TAB2(Rec Long, Krok varchar(5), Datum date) a potřebuji vypsat Rec z TAB1, kde Typ = např. 1 a v TAB2 je s tímto Rec Krok 'KrokA' a zároveň není žádný Krok 'KrokB' s datem větším než u 'KrokA'. Snad je to srozumitelné. Děkuji za pomoc.

    Odpovědi

    20.3.2013 22:41 kuka
    Rozbalit Rozbalit vše Re: SQL dotaz - 2 tabulky
    Spojeni TAB1 s TAB2 s podminkou na KrokA by melo byt trivialni, nasledne ... and not exists (dotaz na KrokB podle kriterii) a podle moznosti duplicity KrokA pak pripadne jeste distinct.
    20.3.2013 23:32 Petr
    Rozbalit Rozbalit vše Re: SQL dotaz - 2 tabulky
    ano, s podmínkou jen na 'KrokA' bych udělal SELECT DISTINCT TAB1.Rec FROM TAB1,TAB2 WHERE TAB1.Rec=TAB2.Rec AND Krok = 'KrokA'; Ale jak tam dodat podmínku na nepřitomnost 'KrokB' a ještě jen s datem větším než u toho nalezeného 'KrokA' (A to ještě teoreticky by pro jeden Rec mohlo záznamů kde Krok = 'KrokA' být i více a v tom případě by mě zajímal ten poslední (s nejvyšším datem) a testovat nepřítomnost 'KrokB' po tomto datu), to nevím ...
    21.3.2013 08:26 j
    Rozbalit Rozbalit vše Re: SQL dotaz - 2 tabulky
    na prasaka (nezarucuju syntax):
    
    select * (
    
    select * from tab1
     join (select rec, max(datum) from tab2 where krok = "kroka") as s1
        on tab1.rec = s2.rec
     join (select rec, max(datum) from tab2 where krok = "krokb") as s2
        on tab1.rec = s2.rec
    )
    
    where s1.datum > s2.datum
    
    
    21.3.2013 08:30 j
    Rozbalit Rozbalit vše Re: SQL dotaz - 2 tabulky
    a jasne, uz tam vidim min jeden bug ... prvni join ma byt na s1 samo ...
    21.3.2013 09:18 kuka
    Rozbalit Rozbalit vše Re: SQL dotaz - 2 tabulky
    No prida se tam and not exists (select vybirajici KrokB s vyssim datumem). Jestli chces maximalni datum, tak nakonec neudelas distinct, ale group by. Pokud tyto konstrukce neznas (exists, group by), tak si je nekde dohledej, to jsou azklady SQL, bez kterych se daleko nedostanes. Vysledny dotaz bude de facto ten tvuj slovni pozadavek zapsany "anglicky".
    21.3.2013 14:34 Petr
    Rozbalit Rozbalit vše Re: SQL dotaz - 2 tabulky
    Základy SQL znám, ale v tomto případě prostě nevím. Mohl byste mi prosím napsat celý SQL dotaz?
    21.3.2013 15:50 kuka
    Rozbalit Rozbalit vše Re: SQL dotaz - 2 tabulky
    Tak treba
    select t1.rec, max(krok_a.datum)
    from t1, t2 krok_a
    where t1.rec = krok_a.rec
      and krok_a.krok = 'KrokA'
      and not exists( select 0 from t2 krok_b
                        where krok_b.rec = t1.rec
                          and krok_b.krok = 'KrokB'
                          and krok_b.datum > krok_a.datum)
    group by t1.rec
    
    konkretne toto lze udelat jednoduchym group by jen nad tabulkou t2, coz doporucuju jako cviceni.
    21.3.2013 08:12 Tomáš
    Rozbalit Rozbalit vše Re: SQL dotaz - 2 tabulky

    Asi tak nějak (čistě syntaktický přepis Vašeho zadání):

    select t1.Rec
    from TAB1 as t1
    join TAB2 as t2 
      on t1.Rec=t2.Rec and t.Krok='KrokA' and t1.Typ=1
    left join ( 
      select Rec,min(Datum) as dt
      from TAB2
      where Krok='KrokB'
      group by Rec
    ) as t3
     on t2.Rec=t3.Rec and t2.Datum < t3.dt 
    where t3.Rec is null  
    

    Kdyby jste uvedl co je v TAB2 (primárním) klíčem, tak to možná šlo ještě jednodušeji ( jedna agregace plus jeden join ).

    21.3.2013 10:35 Petr
    Rozbalit Rozbalit vše Re: SQL dotaz - 2 tabulky
    Děkuji, tohle vypadá nadějně, ale potřebuji z TAB2 najít poslední (s nejvyšším datem) záznam, kde Krok = 'KrokA' a pak už po něm není žádný záznam 'KrokB'
    21.3.2013 21:19 Tomáš
    Rozbalit Rozbalit vše Re: SQL dotaz - 2 tabulky

    Zase jen syntaktický přepis (bez jakékoliv znalosti skutečného problému)

    select
      Rec
      ,max(case when Krok='KrokA' then Date else null end ) -- poslední datum pro KrokA
    from TAB2
    group by Rec
    having  
      max( case when Krok='KrokA' then Date else null end )  -- nejvyssi datum pro KrokA ( = poslední)
      > -- je větší než
      max( case when Krok='KrokB' then Date else null end )  -- nejvyšší datum pro KrokB
    
    21.3.2013 21:33 Tomáš
    Rozbalit Rozbalit vše Re: SQL dotaz - 2 tabulky

    Ještě jsem zapoměl na dva okrajové případy, kdy jeden z kroků není k dispozici

    select
      Rec
      ,max(case when Krok='KrokA' then Date else null end ) -- poslední datum pro KrokA
    from TAB2
    group by Rec
    having
      max( case when Krok='KrokA' then Date else null end ) is not null -- existuje krokA
     and -- a zároveň
      (
         max( case when Krok='KrokA' then Date else null end )  -- nejvyssi datum pro KrokA ( = poslední)
         > -- je větší než
         max( case when Krok='KrokB' then Date else null end )  -- nejvyšší datum pro KrokB
      or -- nebo se krokB nedohledá
         max( case when Krok='KrokB' then Date else null end ) is NULL 
     
      )
    

    Založit nové vláknoNahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.