abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    5.6. 22:22 | Nová verze

    Byla vydána nová verze 9.7 multiplatformní digitální pracovní stanice pro práci s audiem (DAW) Ardour. Přehled novinek, vylepšení a oprav v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    5.6. 18:22 | Komunita

    Vývojáři webového prohlížeče Ladybird dnes oznámili, že mění způsob vývoje. S blížícím se vydáním alfa verze přestávají přijímat veřejné pull requesty. Všechny otevřené veřejné pull requesty budou uzavřeny. Tým nedokáže garantovat bezpečnost AI generovaných pull requestů.

    Ladislav Hagara | Komentářů: 2
    5.6. 17:33 | Zajímavý software

    OpenLogi (GitHub) je open source náhrada aplikace Logi Options+ pro přizpůsobení myší od společnosti Logitech. Zatím běží pouze na macOS.

    Ladislav Hagara | Komentářů: 1
    5.6. 04:33 | Nová verze

    Na čem pracují vývojáři webového prohlížeče Ladybird (GitHub)? Byl publikován přehled vývoje za květen (YouTube).

    Ladislav Hagara | Komentářů: 9
    4.6. 11:22 | Bezpečnostní upozornění

    Úřad pro ochranu osobních údajů řeší desítky stížností na jednotné měsíční hlášení zaměstnavatele, které stát spustil počátkem dubna. Systém, jenž má firmám odlehčit od desítek formulářů, nejenže výrazně zatížil jejich účetní oddělení, ale docházelo v něm i k únikům osobních dat zaměstnanců k firmám, kde nepracovali. Podle ministerstva práce a sociálních věcí stála za problémem technická chyba. „Incident se týkal několika stovek

    … více »
    Ladislav Hagara | Komentářů: 23
    4.6. 10:46 | Nová verze

    Byla vydána (𝕏, Bluesky) nová verze 22.0.0 open source webového aplikačního frameworku Angular (Wikipedie). Přehled novinek v příspěvku na blogu.

    Ladislav Hagara | Komentářů: 0
    4.6. 04:33 | Nová verze

    Vim Classic byl vydán ve verzi 8.3. Drew DeVault oznámil tento fork editoru Vim (verze 8.2.0148, tj. těsně před zavedením Vim9 skriptování) v březnu letošního roku. Důvodem forku bylo, že vývojáři editorů Vim a Neovim začali při vývoji využívat LLM.

    Ladislav Hagara | Komentářů: 7
    4.6. 03:44 | Komunita

    Open source konference DevConf.CZ 2026 proběhne 18. a 19. června v Brně na FIT VUT. Publikován byl program a spuštěna byla registrace.

    Ladislav Hagara | Komentářů: 1
    3.6. 19:44 | Nová verze

    Společnost JetBrains uvolnila verzi 2 svého open-source velkého jazykového modelu (LLM) pro vývojáře Mellum.

    Ladislav Hagara | Komentářů: 0
    3.6. 14:44 | IT novinky

    Probíhá konference Microsoft Build 2026. Microsoft představuje své novinky: kvantový čip Majorana 2, Surface Laptop Ultra a Surface RTX Spark Dev Box s NVIDIA RTX Spark, Intelligent Terminal, Coreutils for Windows (fork Rust Coreutils), AI modely MAI, AI agenta Scout, platformu pro agent-first zařízení Project Solara, …

    Ladislav Hagara | Komentářů: 0
    Které desktopové prostředí na Linuxu používáte?
     (12%)
     (8%)
     (2%)
     (15%)
     (31%)
     (3%)
     (6%)
     (3%)
     (15%)
     (26%)
    Celkem 1844 hlasů
     Komentářů: 30, poslední 3.4. 20:20
    Rozcestník


    Dotaz: Smazat radky starsi nez... ale ponechat alespon 3 posledni

    16.4.2021 12:25 tom
    Smazat radky starsi nez... ale ponechat alespon 3 posledni
    Přečteno: 2034×
    Zdravim,

    mam zhruba nasledujici MySQL tabulku MSG_LOG:
    VARCHAR username
    TEXT    msg
    DATE    created_at
    
    A potreboval bych odmazat zpravy starsi nez 1 mesic, ale ponechat alespon 3 posledni pro kazdy username (i kdyz budou treba starsi nez 1 mesic)

    Verim, ze uz to nekdo musel resit, ale asi se googlu spatne ptam :(

    Dekuji

    Odpovědi

    16.4.2021 17:30 X
    Rozbalit Rozbalit vše Re: Smazat radky starsi nez... ale ponechat alespon 3 posledni
    Pokud se jedna o jednorazovou akci, tak si nejprve pro kazdeho uzivatele dohledej ID prvnich tri zaznamu starsixh nez jeden mesic a nasledne smaz vsechny zaznamy starsi jeden mesic s vyjimkou ID zaznamu ktere jsi si dohledal predtim..
    16.4.2021 17:33 X
    Rozbalit Rozbalit vše Re: Smazat radky starsi nez... ale ponechat alespon 3 posledni
    Neco ve smyslu:
    DELETE starsi nez mesic EXCEPT (SELECT prvni tri starsi nez mesic pro kazdeho usera);
    
    16.4.2021 21:17 okbobcz | skóre: 8
    Rozbalit Rozbalit vše Re: Smazat radky starsi nez... ale ponechat alespon 3 posledni
    Tohle je klasická úloha nalezení top N pro každou skupinu. Korelovaným poddotazem se dá udělat top 1 pro každou skupinu. Ale top n je dost komplikované bez moderního SQL, které je v MySQL až od 8čky. Dá se to udělat jednoduše LATERAL joinem, ještě jednodušeji window funkcemi, a poměrně komplikovaně rekurzivním dotazem. Nejsem si jistý jestli některá z těchto možností byla ve starších verzích MySQL než je nejnovější řada. Ve starších řadách je to možné vyřešit aplikačně nebo uloženou procedurou - skrz iteraci přes kurzor nad uživateli.
    19.4.2021 18:33 EtDirloth | skóre: 11
    Rozbalit Rozbalit vše Re: Smazat radky starsi nez... ale ponechat alespon 3 posledni
    Trochu nestastne definovane zadanie vzhladom na dve veci:
    • kedze je pouzity typ DATE a predpokladam, ze v jednom dni moze byt viac zaznamov, tak sa tazko urci, ktore 3 z viacerych s rovnakym datumom su tie posledne
    • "ponechat aspon 3" je dost vagne - ale zhodou okolnosti to zjednodusi implementaciu tej query - len jej vysledok nebude deterministicky
    ako uz Pavel nadomnou hovoril, v starom mysql chyba podpora korelovanych poddotazov v DELETE - pre mysql 5.6, ktore som skusal na sqlfiddle som prisiel iba na toto:
    CREATE TABLE msg_log
    (
       username   VARCHAR(100)
     , msg        TEXT(100)
     , created_at DATE
    );
    CREATE INDEX idx_msg_log_created_at ON msg_log (username, created_at);
    INSERT INTO msg_log VALUES ('y', 'A', CURRENT_DATE - interval 6 month);
    INSERT INTO msg_log VALUES ('x', 'B', CURRENT_DATE - interval 5 month);
    INSERT INTO msg_log VALUES ('x', 'C', CURRENT_DATE - interval 4 month);
    INSERT INTO msg_log VALUES ('x', 'D', CURRENT_DATE - interval 4 month);
    INSERT INTO msg_log VALUES ('x', 'E', CURRENT_DATE - interval 4 month);
    INSERT INTO msg_log VALUES ('x', 'F', CURRENT_DATE - interval 3 month);
    INSERT INTO msg_log VALUES ('x', 'G', CURRENT_DATE - interval 2 month);
    INSERT INTO msg_log VALUES ('x', 'H', CURRENT_DATE - interval 1 month);
    INSERT INTO msg_log VALUES ('x', 'I', CURRENT_DATE - interval 1 day);
    INSERT INTO msg_log VALUES ('y', 'J', CURRENT_DATE);
    INSERT INTO msg_log VALUES ('z', 'K', CURRENT_DATE - interval 10 month);
    INSERT INTO msg_log VALUES ('z', 'L', CURRENT_DATE - interval 9 month);
    INSERT INTO msg_log VALUES ('z', 'M', CURRENT_DATE - interval 8 month);
    INSERT INTO msg_log VALUES ('z', 'N', CURRENT_DATE - interval 7 month);
    INSERT INTO msg_log VALUES ('z', 'O', CURRENT_DATE - interval 6 month);
    INSERT INTO msg_log VALUES ('z', 'P', CURRENT_DATE - interval 3 month);
    
    DELETE d
      FROM msg_log AS d
      WHERE d.username = 'z'
        AND d.created_at < (
       SELECT min(x.created_at) min_ts
         FROM (
          SELECT *
             FROM msg_log l
             WHERE l.created_at < CURRENT_DATE - interval 1 month
               AND l.username = 'z'
             ORDER BY l.created_at DESC
             LIMIT 3
       ) x)
    ;
    
    ...a volat to pre kazdeho usera zvlast (v priklade 'z').

    tu je kompletny priklad pre PostgreSQL (testovane na 12.6):
    
    CREATE TABLE msg_log
    (
       username   VARCHAR
     , msg        TEXT
     , created_at DATE
    ;
    CREATE INDEX idx_msg_log_created_at ON msg_log (username, created_at);
    
    INSERT INTO msg_log VALUES ('y', 'A', current_date - interval '6 month');
    INSERT INTO msg_log VALUES ('x', 'B', current_date - interval '5 month');
    INSERT INTO msg_log VALUES ('x', 'C', current_date - interval '4 month');
    INSERT INTO msg_log VALUES ('x', 'D', current_date - interval '4 month');
    INSERT INTO msg_log VALUES ('x', 'E', current_date - interval '4 month');
    INSERT INTO msg_log VALUES ('x', 'F', current_date - interval '3 month');
    INSERT INTO msg_log VALUES ('x', 'G', current_date - interval '2 month');
    INSERT INTO msg_log VALUES ('x', 'H', current_date - interval '1 month');
    INSERT INTO msg_log VALUES ('x', 'I', current_date - interval '1 day');
    INSERT INTO msg_log VALUES ('y', 'J', current_date);
    INSERT INTO msg_log VALUES ('z', 'K', current_date - interval '10 month');
    INSERT INTO msg_log VALUES ('z', 'L', current_date - interval '9 month');
    INSERT INTO msg_log VALUES ('z', 'M', current_date - interval '8 month');
    INSERT INTO msg_log VALUES ('z', 'N', current_date - interval '7 month');
    INSERT INTO msg_log VALUES ('z', 'O', current_date - interval '6 month');
    INSERT INTO msg_log VALUES ('z', 'P', current_date - interval '3 month');
    
    WITH users AS (
    -- idealne mat ulozene v tabulke, na ktoru odkazuje cudzi kluc na msg_log(username)
          SELECT DISTINCT username FROM msg_log
       ), maxDateKeptPerUser AS (
          SELECT u.username, (
             SELECT min(x.created_at)
                 FROM (SELECT *
                         FROM msg_log l
                         WHERE l.created_at < CURRENT_DATE - interval '1 month'
                           AND l.username = u.username
                         ORDER BY l.created_at DESC
                         LIMIT 3
                      ) x
             ) AS created_at
             FROM users AS u
       )
    DELETE FROM msg_log AS d
       USING maxDateKeptPerUser AS m
       WHERE d.username   = m.username
         AND d.created_at < m.created_at
    ;
    
    
    22.4.2021 09:57 ajtacka
    Rozbalit Rozbalit vše Re: Smazat radky starsi nez... ale ponechat alespon 3 posledni
    To je otazka jazyka nad tym, napriklad RoR(RUR), z ktoreho ale bola odstranene pokrocilejsie veci v zaujme pokroku, lenze je to ako skrabanie sa lavou nohou za pravym uchom.

    Zda sa to neustaly proces, lenze clovek nevie, co si ma o tom mysliet a ako to vyriesit. Ponukaju sa moznosti co s tym, ale ani jedna sa mi nepaci.

    Nieco je chybne.

    Založit nové vláknoNahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.