Autor | Zpráva | ||
---|---|---|---|
nevimsiradyprosimpomoc Profil * |
Řekněme, že se mi do databáze každých 10 minut ukládají automatizovaná data ve formátu
nazev | pocet | datum | id škoda | 2 | 2020-03-16 22:52:42 škoda | 5 | 2020-03-16 19:52:42 toyota | 1 | 2020-03-16 20:52:42 toyota | 8 | 2020-03-16 23:52:42 a já bych se chtěl zeptat, jak mohu dnes, tedy 19.3.2020 odstranit všechna data z tabulky, ALE ponechat jen ta data: která mají dnešní datum A ZÁROVEŇ ponechat z každého minulého dne jen poslední záznam, co byl pro danou položku "nazev" zaznamenán? Posílám upravenou tabulku s řešením, co by měl sql dotaz udělat. nazev | pocet | datum | id škoda | 3 | 2020-03-16 22:52:42 škoda | 2 | 2020-03-16 20:52:42 škoda | 5 | 2020-03-17 19:52:42 toyota | 1 | 2020-03-16 20:52:42 toyota | 5 | 2020-03-18 20:52:42 toyota | 8 | 2020-03-16 23:52:42 škoda | 12 | 2020-03-19 23:52:42 toyota | 12 | 2020-03-19 17:52:42 VÝSLEDEK PO VYMAZÁNÍ BY TEDY MĚL BÝT škoda | 3 | 2020-03-16 22:52:42 škoda | 5 | 2020-03-17 19:52:42 toyota | 5 | 2020-03-18 20:52:42 toyota | 8 | 2020-03-16 23:52:42 a všchny záznamy dnešní škoda | 12 | 2020-03-19 23:52:42 toyota | 12 | 2020-03-19 17:52:42 |
||
Kajman Profil |
Umí databáze window funkce? Tedy jaká verze mysql?
Pro takové dotazy by bylo lepší mít datum a čas ve dvou sloupcích. A mít vícesloupcový index nad (nazev, datum, cas) Pro starší verze a datetime sloupec by mohlo jít něco jako SELECT t.* FROM tabulka t JOIN (SELECT nazev, Date(datum) trunc_datum, Max(datum) max_datum FROM tabulka WHERE datum < '2020-03-19' GROUP BY nazev, Date(datum) HAVING Count(*) >= 2) m ON t.nazev = m.nazev AND Date(t.datum) = m.trunc_datum AND t.datum < m.max_datum Když select vypíše data, která chcete smazat, a budete to mít zazálohované, můžete první řádek změnit za DELETE t |
||
nevimsiradyprosimpomoc Profil * |
#3 · Zasláno: 19. 3. 2020, 14:56:13
Funguje, děkuji mnohokrát!
|
||
Časová prodleva: 4 roky
|
0