Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno SQL - distinct

Zdravím...
mám tabulku 'klienti' s cca 30 sloupci.
Někteří klienti jsou zde několikrát, ale to má své důvody.

Stejné klienty chci poznat posle duplicitního sloupce telefon.

Jak mám vypsat všechny sloupce a všechny klienty tak, aby je jedno telefonní číslo neopakovalo?

Zkoušel jsem funkci distinct, ale nepovedlo se mi vypsat všechny sloupce, ale jen sloupec telefon.

Předmět Autor Datum
Někteří klienti jsou zde několikrát, ale to má své důvody. To máš akože pre jedného klienta riadky,…
los 07.01.2013 12:38
los
To máš akože pre jedného klienta riadky, ktoré majú vo všetkých stĺpcoch rovnaké hodnoty? je to 1:n…
lukinpark 07.01.2013 13:18
lukinpark
Napríklad: select k1.* from klienti k1 join ( select klient_id, max(created) created from klienti g…
los 07.01.2013 14:24
los
paráda, přesně toto jsem potřeboval... díky moc... poslední
lukinpark 07.01.2013 15:03
lukinpark
Zatím jsem příliš nepřemýšlel nad tím, co píše výše los. Pokud jde o výpis jen unikátních telefonů…
Flash_Gordon 07.01.2013 12:45
Flash_Gordon
ano, toto je možnost, ale GROUP BY mi nějak ignoroval ORDER BY
lukinpark 07.01.2013 13:24
lukinpark
Protože klíčová slova mají předepsané pořadí, které je potřeba dodržet: SELECT $<$seznam_výstupních…
Flash_Gordon 07.01.2013 13:48
Flash_Gordon
Ano to chápu, proto GROUP BY nemůžu použít, že?
lukinpark 07.01.2013 13:55
lukinpark
Muzes pouzit Group by SELECT klient, telefon, Count(*) as pocet FROM tabulka group by klient, telef…
Jan Fiala 07.01.2013 14:01
Jan Fiala
Ne protože mi to vybere první záznam s klientem a já potřebuju poslední záznam.
lukinpark 07.01.2013 14:18
lukinpark

Někteří klienti jsou zde několikrát, ale to má své důvody.

To máš akože pre jedného klienta riadky, ktoré majú vo všetkých stĺpcoch rovnaké hodnoty? Ak áno, tak to nedáva zmysel. Zaujímali by ma tie dôvody (stačí jeden) mať viacero rôznych záznamov pre jedného klienta.

Jak mám vypsat všechny sloupce a všechny klienty tak, aby je jedno telefonní číslo neopakovalo?

Ak nemáš vo všetkých stĺpcoch rovnaké hodnoty, tak čo chceš vlastne vypísať pre dvoch rôznych klientov s rovnakým telefónnym číslom?

Spájať klientov len na základe rovnakého telefónneho čísla nie je vôbec spoľahlivé.

To máš akože pre jedného klienta riadky, ktoré majú vo všetkých stĺpcoch rovnaké hodnoty?

je to 1:n, ale v jedné tabulce... převzal jsem jeden systém a ten je úplně špatně, ale překopávat ho nechci...

dejme tomu mám

| id | klient_id | telefon   | create     | popis                 |
|----|-----------|-----------|------------|-----------------------|
|-1--|-1---------|-123456789-|-2012-12-30-| Klient nemá zájem     |
|----|-----------|-----------|------------|-----------------------|
|-2--|-1---------|-123456789-|-2012-10-12-| Neodpovídá            |
|----|-----------|-----------|------------|-----------------------|
|-3--|-2---------|-987654321-|-2012-08-11-| Našel jinou nabídku   |
|----|-----------|-----------|------------|-----------------------|
|-4--|-1---------|-123456789-|-2012-05-01-| Domlouvá se           |
|----|-----------|-----------|------------|-----------------------|
|-5--|-3---------|-555555555-|-2012-05-01-| Mám zavolat později   |
|----|-----------|-----------|------------|-----------------------|
|-6--|-2---------|-987654321-|-2012-01-01-| Zítra bude dojednání  |
|----|-----------|-----------|------------|-----------------------|

a chci, aby se mi vypsal každého klienta jen jednou, ale s posledním popisem.

Napríklad:

select k1.* from klienti k1 join (
  select klient_id, max(created) created from klienti group by klient_id
) k2 on k1.klient_id=k2.klient_id and k1.created=k2.created;

Edit: Spojil som to podľa klient_id a nie podľa telefon, takže ak to chceš spájať naozaj podľa telefónu, tak si to uprav.

Protože klíčová slova mají předepsané pořadí, které je potřeba dodržet:

SELECT $<$seznam_výstupních_sloupců$>$
FROM $<$seznam_tabulek$>$
[WHERE $<$podmínka_řádku$>$]
[GROUP BY $<$seznam_výrazů_seskupení$>$]
[HAVING $<$podmínka_skupiny$>$]
[ORDER BY $<$seznam_kritérií_třídění$>$]

Order by je tedy na konci.

Zpět do poradny Odpovědět na původní otázku Nahoru