David Alžběta 11:22 2012 Muži A Lukov Oil M
David Alžběta 10:22 2014 Muži A Lukov Oil M
Radek Lavina 13:20 2015 Muži B Kolov M
Radek Lavina 15:20 2018 Muži B Kolov M
Podle mě, to přesně odpovídá zadání. Chce unikátní osoby, nejlepší
čas osoby, rok kdy toho času dosáhl a další data z "nejlepšího" záznamu,
vždy 1 unikátní záznam osoby. Viz. dotaz a ukázkové tabulky.
Jako tank to rozhodně nevidím, tank by bylo použití kurzoru
A přesně na to stačí jednoduchý select. Přijde mi naprosto zbytečné,
páchat takový složitý dotaz joinováním té samé tabulky, když to
vyřeší jednoduchý distinct nebo group...
Jenže distinctem ani samotným group nedosáhneš požadovaného
výsledku.
Myslím si, že tady není potřeba se dohadovat... vyzkoušej si to... a
uvidíš … tabulka a i data jsou jednoduchý, přepis ti nepotrvá tak
dlouho...
Ok... tvůj poslední select vypíše 4 sloupce, požadováno je 7... Někde
je něco špatně...
Nehledě na to, že ten dotaz musí vyhodit chybu... jak SQL pozná, že chceš
minimální čas a ne maximální, to samé ročník, to má věšteckou
kouli?
Ok, super, rád se nechávám houpat, pouťové atrakce mám rád, ale ty se
mnou houpeš až moc...
Co to křestní jméno a ten ročník, kdy dosáhl nejlepšího času? …
zajímalo by mě, co používáš za SQL DB...
Nechce se mi cist celou diskuzi nad tim. Asi i vyreseno. Ale stejne pripojim
tip reseni
Chces udaje o cloveku? Tak je pripoj?
nejdriv vytrdis groupem, nechas si id zaznamu
a pak pres left join pripojis data
A je to presne logicky postup, jakym bys postupoval i realnem zivote. Take by
sis nechal vyhledat programem nejdriv zaznamy podle kriterii (seznam id) a pak
by sis je rozklikaval a prohlizel.
SELECTa.id, b.jmeno, b.rok
FROM
(SELECT id FROMtable ... GROUPby ... ) aLEFTJOINtable b ON b.id=a.id
ORDERBY ...
Pripadne s tim group tam muzes mit v select nejaku count nebo neco, co se da
ziskat jen tim grupem.
select * from (
select jmeno, prijmeni, cas, rocnik, katergorie, oddil, pohlavi, cas - (selectmin(cas) from tabulka) as ztrata,
rank() over (partition by jmeno, prijmeni orderby cas) as je_nejlepsi_cas
from tabulka) awherea.je_nejlepsi_cas = 1;
select * from (
select jmeno, prijmeni, cas, rocnik, katergorie, oddil, pohlavi, cas - (selectmin(cas) from tabulka) as ztrata,
rank() over (partition by jmeno, prijmeni orderby cas) as je_nejlepsi_cas
from tabulka) awherea.je_nejlepsi_cas = 1;
SELECT p.jmeno AS jmeno, p.prijmeni AS prijmeni, t.cas AS cas, SEC_TO_TIME(ROUND(TIME_TO_SEC(p.cas)/3.9,0)) AS tempo, TIME_FORMAT(SEC_TO_TIME(( TIME_TO_SEC(cas) - (SELECT TIME_TO_SEC(Min(cas)) FROM prebornik) )), '%i:%s') AS ztrata, p.kategorie AS kategorie, p.oddil AS oddil, p.pohlavi AS pohlavi, p.rocnik AS rocnik FROM prebornik p INNERJOIN (SELECT prijmeni, jmeno, MIN(cas) AS cas FROM prebornik GROUPBY prijmeni, jmeno) t ON p.prijmeni = t.prijmeni AND p.jmeno = t.jmeno AND p.cas = t.cas ORDERBY t.cas ASC
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.