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í
×
    dnes 04:22 | Komunita

    Spolek OpenAlt zve příznivce otevřených řešení a přístupu na 216. sraz, který proběhne v pátek 20. února od 18:00 v Red Hat Labu (místnost Q304) na Fakultě informačních technologií VUT v Brně na ulici Božetěchova 1/2. Tématem srazu bude komunitní komunikační síť MeshCore. Jindřich Skácel představí, co je to MeshCore, předvede nejrůznější klientské zařízení a ukáže, jak v praxi vypadá nasazení vlastního repeateru.

    Ladislav Hagara | Komentářů: 0
    dnes 03:33 | Nová verze

    Byla vydána nová major verze 9.0 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
    včera 13:55 | IT novinky

    Hodnota Bitcoinu, decentralizované kryptoměny klesla pod 70 000 dolarů (1,44 milionu korun).

    Ladislav Hagara | Komentářů: 5
    včera 13:22 | IT novinky

    Valve z důvodu nedostatku pamětí a úložišť přehodnocuje plán na vydání zařízení Steam Controller, Steam Machine a Steam Frame: „Cílem tedy stále zůstává vydat všechna tři nová zařízení v první polovině letošního roku, ale přesná data a ceny jsou dvě věci, na kterých usilovně pracujeme a jsme si dobře vědomi toho, jak rychle se v tomto ohledu může vše změnit. Takže ač dnes žádné zveřejnitelné údaje nemáme, hned jak plány finalizujeme, budeme Vás informovat.“

    Ladislav Hagara | Komentářů: 1
    včera 03:11 | Komunita

    Do 20. února lze hlasovat pro wallpapery pro Ubuntu 26.04 s kódovým názvem Resolute Raccoon.

    Ladislav Hagara | Komentářů: 2
    včera 02:22 | Nová verze

    Byla vydána lednová aktualizace aneb nová verze 1.109 editoru zdrojových kódů Visual Studio Code (Wikipedie). Přehled novinek i s náhledy a videi v poznámkách k vydání. Ve verzi 1.109 vyjde také VSCodium, tj. komunitní sestavení Visual Studia Code bez telemetrie a licenčních podmínek Microsoftu.

    Ladislav Hagara | Komentářů: 1
    4.2. 19:33 | Zajímavý projekt

    Na Kickstarteru běží kampaň na podporu modulárního otevřeného handheldu Mecha Comet s Linuxem.

    Ladislav Hagara | Komentářů: 6
    4.2. 14:00 | Humor

    V nedávno zveřejněné kolekci dokumentů souvisejících s kontroverzním finančníkem a kuplířem Jeffrey Epsteinem se překvapivě objevil i referenční manuál unixového shellu Bash, jedná se o verzi manuálu z roku 2005. Aktuální vydání si lze stáhnout ze stránek GNU.

    NUKE GAZA! 🎆 | Komentářů: 17
    4.2. 13:55 | Nová verze

    The Document Foundation oznámila vydání nové verze 26.2 svobodného kancelářského balíku LibreOffice. Podrobný přehled nových vlastností i s náhledy v poznámkách k vydání (cs). Vypíchnout lze podporu formátu Markdown.

    Ladislav Hagara | Komentářů: 0
    4.2. 12:22 | Pozvánky

    Co se děje ve zprávách, ví asi každý - válka sem, clo tam, demonstrace na jednu i druhou stranu a bastlíř už má pocit, že se snad ani nic jiného neděje. To by však byl velký omyl a Virtuální Bastlírna je zde jako každý měsíc, aby vytáhla na světlo světa události ze světa vědy a techniky. Připojte se tedy nezávaznému povídání Strahovského MacGyvera! Co se tam bude probírat? PCBWay začalo dělat průhledné plošňáky, MARS končí s výrobou skříněk, FEL

    … více »
    bkralik | Komentářů: 0
    Které desktopové prostředí na Linuxu používáte?
     (18%)
     (6%)
     (0%)
     (10%)
     (25%)
     (3%)
     (5%)
     (2%)
     (12%)
     (30%)
    Celkem 772 hlasů
     Komentářů: 25, poslední 3.2. 19:50
    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: 2014×
    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.