Autor | Zpráva | ||
---|---|---|---|
Easygoer Profil |
Mám tabulku "pokusy": CREATE TABLE IF NOT EXISTS `pokusy` ( `id_zaznamu` int(5) NOT NULL AUTO_INCREMENT, `id_klienta` int(4) NOT NULL, `datum` datetime NOT NULL, PRIMARY KEY (`id_zaznamu`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci; U každého id_klienta chci najít záznam s nejnovějším datumem: SELECT id_klienta, datum FROM `pokusy` WHERE datum = (select max(datum)) group by id_klienta; Pokud vkládám nové záznamy postupně a datum pomocí now(), je všechno OK. Pokud ale některé záznamy smažu a vložím nový záznam s nějakým starým datumem, dostanu špatný výsledek. Domníval jsem se, že funkce max(datum) vrací za každé situace nejnovější datum. Poradíte, jak docílit, aby SQL našel u každého klienta nejnovější datum, i v případě, kdy se některé záznamy mažou a občas se přidá starší datum? Děkuji. Zapomněl jsem dodat, že se to týká MySQL. |
||
Kajman Profil |
SELECT id_klienta, datum FROM `pokusy` WHERE (id_klienta, datum) IN (select id_klienta, max(datum) FROM pokusy group by id_klienta); |
||
Easygoer Profil |
Super. Díky moc.
Teď bych tam ještě potřeboval dostat podmínku, aby mi to zobrazilo jen ty výsledky, kde je poslední nazelené datum starší cca 6 měsíců. Tzn. DATEDIFF(CURRENT_DATE, datum) > 180 Bohužel nevím, kam to zapsat... Poradíte? |
||
Easygoer Profil |
#4 · Zasláno: 14. 7. 2024, 15:51:57
Už jsem na to asi přišel:
SELECT id_klienta, datum FROM `pokusy` WHERE DATEDIFF(CURRENT_DATE, datum) > 180 and (id_klienta, datum) IN (select id_klienta, max(datum) FROM pokusy group by id_klienta); |
||
Kajman Profil |
#5 · Zasláno: 14. 7. 2024, 18:19:46
Pro omezení výběru dle výsledků agregační funkce se používá sekce having. Pokud stačí jen ty dva sloupce, tak to jde i bez toho poddotazu.
SELECT id_klienta, Max(datum) datum FROM pokusy GROUP BY id_klienta HAVING Max(datum) > Date_sub('2024-07-17', INTERVAL 180 DAY) Dotazu prospěje jeden index na dvěma sloupci (id_klienta, datum). |
||
Časová prodleva: 3 dny
|
|||
Easygoer Profil |
#6 · Zasláno: 17. 7. 2024, 18:43:22
Kajman:
Díky, vyzkouším to. |
||
Časová prodleva: 2 měsíce
|
0