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 *
Funguje, děkuji mnohokrát!

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0