Autor Zpráva
David1234
Profil *
Ahoj

Mám tabulku firem kde klíčem je IČO. Vedle mám tabulku jednání do které zapisuji každý rozhovor s firmou a provazuji ji s tabulkoou firem opět přez IČO. Jedno IČO má tedy více záznamů v jednání.

Nyní potřebuji vypsat u každé firmy poslední záznam o jenání. Abych neměl ve výpisu několik řádků ke stejné firmě (s různými jednáními), grupuju je. Při grupování se mi ale nedaří z tabulky jednání k danému IČ vybrat právě poslední záznam. Přikládám dotaz, který jsem sestavil, ale nefunguje.

SELECT f.ic, f.nazev, j.upominka, j.cas
FROM firmy AS f LEFT JOIN jednani AS j ON (f.ic=j.ic)
WHERE (f.id_obchodnika=$id_obchodni_reprezentant)
GROUP BY j.ic ORDER BY j.id DESC
turtle
Profil *
Možno by to šlo takto:

SELECT f.ic, f.nazev, (SELECT j.cas FROM jednani AS j WHERE f.ic=j.ic ORDER BY j.id DESC LIMIT 1) AS cas
FROM firmy AS f
WHERE (f.id_obchodnika=$id_obchodni_reprezentant)
ORDER BY j.id DESC

netestované
turtle
Profil *
sorry, bez toho ORDER na konci
David1234
Profil *
MySQL hlásí:
#1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT j.upominka FROM jednani AS j WHERE f.ic=j.ic ORDER BY j.
nightfish
Profil
David1234
na jaké verzi mySQL to zkoušíš? subselecty jsou podporovány tuším od 4.1
David1234
Profil *
Tak to bude ten problém: Verze MySQL: 4.0.27 :(
David1234
Profil *
Tak to bude ten problém: Verze MySQL: 4.0.27
Kajman_
Profil *
Na starých bych zkusil něco jako

SELECT f.ic, f.nazev, j.upominka, j.cas
FROM firmy AS f
LEFT JOIN jednani AS j ON (f.ic=j.ic)
LEFT JOIN jednani AS j2 ON (j.ic=j2.ic and j.id<j2.id)
WHERE (f.id_obchodnika=$id_obchodni_reprezentant)
AND j2.id IS NULL
ORDER BY j.id DESC

ale rychlé to na velkých datech nebude... na 4.1 to jde psát už lépe.
David1234
Profil *
Tohle funguje výborně.
Díky za pomoc
Toto téma je uzamčeno. Odpověď nelze zaslat.