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 22:11 | Bezpečnostní upozornění

    Finanční skupina Partners se stala minulou neděli obětí kybernetického útoku, při kterém se útočníci dostali k některým osobním údajům klientů. Společnost o tom informovala ve čtvrtek. Ujišťuje, že peníze klientů nejsou v ohrožení. „Kybernetický útok zasáhl část IT infrastruktury naší společnosti. Ihned po zjištění útoku jsme s pomocí externích bezpečnostních odborníků začali intenzivně pracovat na minimalizaci škod. Útočníci se

    … více »
    Ladislav Hagara | Komentářů: 0
    dnes 03:55 | IT novinky

    Americká technologická společnost Meta Platforms se dohodla, že zaplatí až zhruba 18 miliard dolarů (asi 373 miliard Kč) za mimosoudní urovnání sporu o závislosti dětí na sociálních sítích a provede významné změny pro jejich používání mladistvými. Téměř tři desítky států USA firmu v roce 2023 obvinily z toho, že sítě Facebook a Instagram vědomě navrhla tak, aby u dětí vyvolávaly závislost, a zatajovala tyto dopady před veřejností. Firma se

    … více »
    Ladislav Hagara | Komentářů: 1
    dnes 02:55 | Komunita

    Byl publikován aktuální přehled dění a novinek z vývoje Asahi Linuxu, tj. Linuxu pro Apple Silicon. Blíží se vydání podporující čipy M3. Vývojáře lze podpořit na GitHub Sponsors a Open Collective.

    Ladislav Hagara | Komentářů: 0
    včera 16:55 | Nová verze

    Kancelářský balík LibreOffice byl vydán ve verzi 26.8. Mimo jiné vylepšuje typografii a kompatibilitu s formáty MS Office, více v poznámkách k vydání.

    |🇵🇸 | Komentářů: 0
    včera 14:55 | Nová verze

    Armbian, tj. linuxová distribuce založená na Debianu a Ubuntu optimalizovaná pro jednodeskové počítače na platformě ARM a RISC-V, ke stažení ale také pro Intel a AMD, byl vydán ve verzi 26.8. Přehled novinek v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 6
    včera 11:44 | Nová verze

    Byla vydána nová verze 23.1.0, tj. první stabilní verze z nové řady 23.1.x, překladačové infrastruktury LLVM (Wikipedie). Přehled novinek v poznámkách k vydání: LLVM, Clang, LLD, Extra Clang Tools, Libc++, Polly a Flang.

    Ladislav Hagara | Komentářů: 0
    včera 02:11 | Nová verze

    Google Chrome 152 byl prohlášen za stabilní. Nejnovější stabilní verze 152.0.7977.64 přináší řadu novinek. Podrobný přehled v poznámkách k vydání. Opraveno bylo 327 bezpečnostních chyb. Vylepšeny byly také nástroje pro vývojáře.

    Ladislav Hagara | Komentářů: 0
    včera 01:11 | Komunita

    Před 35 lety, 25. srpna 1991, oznámil Linus Benedict Torvalds v diskusní skupině comp.os.minix, že vyvíjí (svobodný) operační systém (jako koníček, nebude tak velký a profesionální jako GNU) pro klony 386 (486), že začal v dubnu a během několika měsíců by mohl mít něco použitelného.

    Ladislav Hagara | Komentářů: 3
    25.8. 16:33 | IT novinky

    Apple představil čipy M6 a M5 Ultra, Mac mini s M6 nebo M5 Pro a Mac Studio s M5 Max nebo M5 Ultra. Fedora Asahi Remix zatím podporuje jenom M1 a M2.

    Ladislav Hagara | Komentářů: 22
    25.8. 14:11 | Komunita

    Firefox 157 přinese zapnutou podporu rastrového grafického formátu JPEG XL. Založena je na v Rustu napsané implementaci jxl-rs používané i v Chrome a Chromiu.

    Ladislav Hagara | Komentářů: 0
    Které desktopové prostředí na Linuxu používáte?
     (10%)
     (7%)
     (2%)
     (19%)
     (29%)
     (7%)
     (6%)
     (2%)
     (15%)
     (22%)
    Celkem 2503 hlasů
     Komentářů: 31, poslední 13.8. 00:27
    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: 2230×
    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.