Autor | Zpráva | ||
---|---|---|---|
nowis Profil |
#1 · Zasláno: 29. 1. 2017, 18:05:45
Zdravím a opět prosím o pomoc s formulací dotazu,
mám tabulku se sloupci: ID, ID_kontakt, datum, predmet, typ zjednodušeně by se dalo říct, že jde o termíny schůzek s jednotlivými klienty. Potřeboval bych vyjet tabulku, kde pro každé ID_kontakt bude jeden řádek s poslední schůzkou. Tedy tak, aby na tom řádku bylo relevantní ID, predmet a typ. Tuším, že bych měl použít formuli HAVING, ale nemám s tím zkušenost a nějak se mi zatím nepovedlo dosáhnou správného výsledku. Jak na to? Děkuji! |
||
Keeehi Profil |
#2 · Zasláno: 29. 1. 2017, 19:45:25
V této oblasti si nejsem moc jistý, ale funguje mi toto
SELECT * FROM tabulka GROUP BY ID_kontakt HAVING datum = max(datum); |
||
nowis Profil |
#3 · Zasláno: 29. 1. 2017, 22:26:31
Keeehi:
Díky, takto nějak jsem to zkoušel, ale vracelo mi to prázdný výsledek. Tak zkusím hledat chybu jinde, než ve formulaci dotazu. |
||
TomášK. Profil * |
#4 · Zasláno: 29. 1. 2017, 23:57:42
Ono to má nedeterministické chování.
A similar MySQL extension applies to the HAVING clause. In standard SQL, a query cannot refer to nonaggregated columns in the HAVING clause that are not named in the GROUP BY clause. To simplify calculations, a MySQL extension permits references to such columns. This extension assumes that the nongrouped columns have the same group-wise values. Otherwise, the result is indeterminate. Ve většině databází: WITH tt AS SELECT MAX(datum) OVER(PARTITION BY id_kontakt) AS posledni_datum, * FROM t) SELECT * FROM tt WHERE posledni_datum = datum V MySQL to půjde podobně - v poddotaze vybrat poslední datum ke každému kontaktu a pak podle toho filtrovat. |
||
Keeehi Profil |
TomášK.:
Přesně proto jsem psal, že si nejsem jistý. Takž rozhodně správná varianta je: SELECT tabulka.* FROM tabulka JOIN ( SELECT ID_kontakt, MAX(datum) AS datum FROM tabulka GROUP BY ID_kontakt ) AS t ON tabulka.ID_kontakt = t.ID_kontakt AND tabulka.datum = t.datum |
||
nowis Profil |
#6 · Zasláno: 30. 1. 2017, 13:52:03
Keeehi:
Super! Díky |
||
Časová prodleva: 8 let
|
0