| | |
| Stránka: 1 z 1
| [ Príspevkov: 2 ] | |
Autor | Správa |
---|
Registrovaný: 28.10.11 Prihlásený: 16.04.14 Príspevky: 6 Témy: 4 |
Zdravím potrebujem poradiť mam tabulku
id | idCinnosti | IdZamestnanca | DobaTrvania 1 51 1 10:00:58 2 53 1 12:00:27 3 51 2 01:52:37 4 53 3 00:00:15 5 54 2 00:30:10 6 55 1 00:45:00 7 54 3 11:00:00
potrebujem dostat vystup IdCinnosti | max(DobaTrvania) | IdZamestnanca1 | min(DobaTrvania) | IdZamestnanca2
IdZamestnanca1 - id zamestnanca ktory vykonaval danu cinnost najdlhsie IdZamestnanca2 - id zamestnanca ktory vykonaval danu cinnost najkratsie
mam nasledovne selecty: SELECT IdCinnosti, max(dobaTrvania), IdZamestnanca AS IdZamestanca1, min(dobaTrvania), IdZamestnanca AS IdZamestnanca2 FROM zaznam GROUP BY IdCinnosti
Vystup (ukazka) IdCinnosti | max(DobaTrvania) | IdZamestnanca1 | min(DobaTrvania) | IdZamestnanca2 51 10:00:58 1 00:00:00 1 53 12:00:27 1 00:00:02 1 54 01:52:37 1 00:00:47 1 55 13:18:14 1 00:01:48 1
-tento select vyberie najdlhsie aj najkratsie doby a priradi ich k spravnym cinnostiam, ale neviem ku nim priradit IdZamestnanca , resp vsade su id 1 ale to nieje spravne.
mam este dalsie dva selecty select IdCinnosti, max(Dobatrvania), IdZamestnanca as IdZamestnanca1 FROM zaznam WHERE DobaTrvania IN (SELECT Max(dobatrvania) FROM zaznam GROUP BY IdCinnosti) GROUP BY IdCinnosti
select IdCinnosti, min(Dobatrvania), IdZamestnanca as IdZamestnanca2 FROM zaznam WHERE DobaTrvania IN (SELECT min(dobatrvania) FROM zaznam GROUP BY IdCinnosti) GROUP BY IdCinnosti
Tieto dva selecty priradia aj spravne idecka zamestnancov ale neviem ich spojit do jednej tabulky ako som ju uz nacrtol
IdCinnosti | max(DobaTrvania) | IdZamestnanca1 | min(DobaTrvania) | IdZamestnanca2
Diki za radu.
|
|
Registrovaný: 11.08.07 Príspevky: 4088 Témy: 34 Bydlisko: Brno | Napísal Ďuri: 09.04.2014 19:25 | |
|
Najprv, stokrat omielana chyba pri pouzivani GROUP BY, bohuzial MySQL ej kej ej najhorsi DBMS vsetkych cias robi vsetko preto, aby uzivatelia pisali zly kod. Ak pouzivas GROUP BY, mozes selectovat bud 1) to, co mas v GROUP BY, alebo 2) vysledok agregacnych funkcii. Nedava ziadny zmysel a je chybou selectovat trebars v tom prvom selecte idZamestnanca. Predstav si nasledovne data: Kód: id | idCinnosti | IdZamestnanca | DobaTrvania 1 | 1 | 1337 | 0:10:00 2 | 1 | 8086 | 0:10:00 Kazdy normalny DBMS ti zahlasi, ze tam mas chybu, lebo sa nema na zaklade coho rozhodnut, ci vybrat idZamestnanca 1337 alebo 8086. Preto ti ten prvy dotaz vracia hlupe vysledky, lebo to idZamestnanca si vymysli uplne nahodne. Tie dva selecty spojis normalne selectovanim z viacerych tabuliek naraz, podla mna chces toto: Kód: SELECT a.idcinnosti, a.dobatrvania, a.idzamestnanca, b.idcinnosti, b.dobatrvania, b.idzamestnanca FROM zaznam a, zaznam b WHERE a.dobatrvania = ( SELECT MAX(dobatrvania) FROM zaznam ) AND b.dobatrvania = ( SELECT MIN(dobatrvania) FROM zaznam ) Ale tych vyselectovanych riadkov moze byt viac, ak budes mat viac maximalnych/minimalnych trvani (dokonca je to kartezsky sucin, cize ti to moze narast celkom dost ; ). Nabuduce pouzivaj [code]. Kazdopadne nepises, ci moze byt v tabulke viac zaznamov s rovnakym (idcinnosti, idzamestnanca) - logicky vychadza, ze ano, tak to asi bude treba upravit, ale u teba ziadny pokus o SUM ani nic podobne nevidim, tak si asi na to tiez nemyslel - upresni. Aky typ ma kdyztak stlpec dobatrvania?
|
|
| Stránka: 1 z 1
| [ Príspevkov: 2 ] | |
| Nemôžete zakladať nové témy v tomto fóre Nemôžete odpovedať na témy v tomto fóre Nemôžete upravovať svoje príspevky v tomto fóre Nemôžete mazať svoje príspevky v tomto fóre
|
|