Avatar
pintera.jakub:

Ahoj, potřeboval bych poradit mam sloupeček něco_id a vedle něho mam sloupeček hodnost. Potřeboval bych aby u řádků ze stejným něco_id vybralo vždy pouze jeden a to ten s nejvyššim id.
Příklad:
něco_id hodnost poznámka
1------------1---------A
_____________­_________
1------------3---------B
_____________­_________
2------------1---------C
_____________­_________
2------------3---------D
_____________­_________
2------------2---------E
_____________­_________
1------------4.........F
_____________­_________
1------------5---------G
_____________­_________
A z této tabulky potřebuji vybrat pouze údaje s poznámkou G,D
Jde to nějak?

Editováno 1.3.2014 17:38
 
Odpovědět 1.3.2014 17:35
Avatar
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Zdeněk Pavlátka:

Něco na způsob tohohle:

SELECT MAX(id) as hodnota FROM tabulka WHERE poznamka = 'G' OR poznamka = 'D'
Nahoru Odpovědět 1.3.2014 17:41
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Odpovídá na pintera.jakub
Michal Štěpánek:

Trošku zmatený dotaz, řekl bych...
Jestli to dobře chápu, použil bych SQL dotaz s použitím GROUP BY

SELECT * FROM tabulka ORDER BY hodnost DESC GROUP BY něco_id
Nahoru Odpovědět 1.3.2014 17:46
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Nahoru Odpovědět 1.3.2014 17:48
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Odpovídá na Zdeněk Pavlátka
Michal Štěpánek:

Myslím si, že výběr dat s poznámkou G a D byl myšlen tak, že mají v tomto případě oba nejvyšší 'hodnost' u každého 'něco_id' a ne, že by chtěl vybírat pouze tyto dva...

Nahoru Odpovědět 1.3.2014 17:52
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
pintera.jakub:

Děkuju vyzkouším to. Jinak ta poznámka je jen jako příklad.

 
Nahoru Odpovědět 1.3.2014 17:54
Avatar
Odpovídá na Michal Štěpánek
pintera.jakub:

Moc díky, ale toto hází syntax error a pokud přesunu ORDER BY za Group BY DESC tak to sice chybu nehází ale ukáže to jen jedno se stejnym id, ale s tou menší hodností a to ať dám desc asc. Nevíš pls co s tim?

 
Nahoru Odpovědět 1.3.2014 18:17
Avatar
Drahomír Hanák
Tým ITnetwork
Avatar
Odpovídá na pintera.jakub
Drahomír Hanák:

Order by se vykoná až po seskupení. Mohlo by to vypadat třeba nějak takhle:

SELECT * FROM tabulka a WHERE hodnost = (SELECT MAX(hodnost) FROM tabulka WHERE neco_id = a.neco_id)
 
Nahoru Odpovědět  +1 1.3.2014 18:30
Avatar
Odpovídá na pintera.jakub
Michal Štěpánek:

Zkusil bych tam dát uvozovky nebo apostrofy u toho řazení a groupování...
Jaký datový typy máš v tý tabulce?

Nahoru Odpovědět 1.3.2014 18:36
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Odpovídá na Drahomír Hanák
pintera.jakub:

Díky moc, ale nešlo by to nějak pomocí toho GROUP BY, protože já sem tuto tabulku tady nahoře dal jen jako příklad. Potřebuji to totiž použít na výsledku, který vzniká pomocí join.

 
Nahoru Odpovědět 1.3.2014 18:41
Avatar
Odpovídá na Michal Štěpánek
pintera.jakub:

S tima úvozovkama to taky nejde používám tam int.

 
Nahoru Odpovědět 1.3.2014 18:46
Avatar
Odpovídá na pintera.jakub
Michal Štěpánek:

Kolika dat se ten select týká? Nešlo by to procházet cyklem?

Nahoru Odpovědět 1.3.2014 18:56
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Drahomír Hanák
Tým ITnetwork
Avatar
Odpovídá na pintera.jakub
Drahomír Hanák:

Napadá mě už jenom jedna možnost. Seřadit si výsledek podle hodnosti a ten pak použít jako data pro dotaz, který je seskupí podle neco_id.

SELECT * FROM (SELECT * FROM tabulka ORDER BY hodnost DESC) a GROUP BY a.neco_id
 
Nahoru Odpovědět  +1 1.3.2014 18:57
Avatar
Odpovídá na Drahomír Hanák
pintera.jakub:

Dík ale toto by se dalo podle mě použít jen v případě že bych to dělal pro jednu tabulku ke které by nebyla žádná připojená.

 
Nahoru Odpovědět  -1 1.3.2014 19:01
Avatar
Odpovídá na Michal Štěpánek
pintera.jakub:

Ten select je asi na 7 tabulek

 
Nahoru Odpovědět 1.3.2014 19:01
Avatar
Drahomír Hanák
Tým ITnetwork
Avatar
Odpovídá na pintera.jakub
Drahomír Hanák:

Ta vnořená query nemusí vybírat data z klasické tabulky. Klidně to může být nějaký spojený výsledek (seřadit ho podle hodnosti už není tak složité). V podstatě by mělo stačit jen obalit tvoji SQL query, která vygeneruje ten výsledek, co jsi ho ukázal nahoře, tím mým dotazem (dát místo vnořeného SELECTu tvůj dotaz). Neznám ale tu vnitřní strukturu ani jak dáváš dohromady tuhle složenou tabulku, takže asi víc neporadím.

 
Nahoru Odpovědět  +1 1.3.2014 19:23
Avatar
pintera.jakub:

Ok díky to mě nenapadlo. Ještě se omlouvám ale nevěděl bys prosim syntaxi toho příkazu?

Potřeboval bych toto aby to fungovalo.
napadlo mě jen toto ale to má chybu v syntaxy.
_____________­________________________­________________________­______________
SELECT (SELECT * FROM tblkategorie kat LEFT JOIN tblZANR zanr ON zanr.ID_KATEGO­RIE=kat.KATEGO­RIE_ID WHERE kat.navrh IS NULL ORDER BY ID_UROVEN ASC)GROUP BY KNIHA_ID

Editováno 1.3.2014 20:56
 
Nahoru Odpovědět 1.3.2014 20:54
Avatar
Odpovídá na pintera.jakub
Michal Štěpánek:

Myslím, že hlavní problém v syntaxi je to SELECT(SELECT...
vnořené selecty by měly být ve tvaru např.:

SELECT něco FROM tabulka WHERE cokoliv NOT IN(SELECT...)
Nahoru Odpovědět 1.3.2014 22:56
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
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.

Zobrazeno 18 zpráv z 18.