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í
×
    včera 22:00 | IT novinky

    Google oznámil, že Quick Share na Androidu funguje s AirDropem na iOS. Zatím na telefonech Pixel 10. Uživatelé tak mohou snadno přenášet soubory z telefonů s Androidem na iPhony a obráceně.

    Ladislav Hagara | Komentářů: 0
    včera 21:22 | Nová verze

    Byla vydána nová verze 8.5 (8.5.0) skriptovacího jazyka PHP používaného zejména k vývoji dynamických webových stránek. Přináší řadu novinek a vylepšení (URI Extension, Pipe Operator, Clone With, …). Vydána byla také příručka pro přechod z předchozích verzí.

    Ladislav Hagara | Komentářů: 0
    včera 12:44 | IT novinky

    Evropská komise zahájila tři vyšetřování týkající se cloudových platforem Amazon Web Services (AWS) a Microsoft Azure. Evropská exekutiva, která plní také funkci unijního antimonopolního orgánu, chce mimo jiné určit, zda jsou americké společnosti Microsoft a Amazon v cloudových službách takzvanými gatekeepery, tedy hráči, kteří významně ovlivňují provoz internetu a musí dle nařízení o digitálních trzích (DMA) na společném trhu

    … více »
    Ladislav Hagara | Komentářů: 4
    včera 12:33 | IT novinky

    Společnost Meta Platforms vyhrála ostře sledovaný spor o akvizici sítě pro sdílení fotografií Instagram a komunikační aplikace WhatsApp. Podle amerického soudu firma jejich převzetím neporušila antimonopolní zákon, protože si tak nemonopolizovala trh sociálních sítí. Žalobu na Metu podala před pěti lety americká Federální obchodní komise (FTC). FTC argumentovala, že Meta, tehdy známá jako Facebook, koupila tyto dvě společnosti v letech 2012 a 2014 proto, aby s nimi nemusela soutěžit.

    Ladislav Hagara | Komentářů: 0
    včera 05:11 | IT novinky

    Home Assistant včera představil svůj nejnovější oficiální hardware: Home Assistant Connect ZBT-2 pro připojení zařízení na sítích Zigbee nebo Thread.

    Ladislav Hagara | Komentářů: 5
    19.11. 19:44 | Nová verze

    Byla vydána verze 9.1 open source virtualizační platformy Proxmox VE (Proxmox Virtual Environment, Wikipedie) založené na Debianu. Přehled novinek v poznámkách k vydání a informačním videu.

    Ladislav Hagara | Komentářů: 1
    19.11. 17:44 | IT novinky

    Byl aktualizován seznam 500 nejvýkonnějších superpočítačů na světě TOP500. Nejvýkonnějším superpočítačem zůstává El Capitan od HPE (Cray) s výkonem 1,809 exaFLOPS. Druhý Frontier má výkon 1,353 exaFLOPS. Třetí Aurora má výkon 1,012 exaFLOPS. Nejvýkonnější superpočítač v Evropě JUPITER Booster s výkonem 1,000 exaFLOPS je na čtvrtém místě. Nejvýkonnější český superpočítač C24 klesl na 192. místo. Karolina, GPU partition klesla na 224. místo a Karolina, CPU partition na 450. místo. Další přehledy a statistiky na stránkách projektu.

    Ladislav Hagara | Komentářů: 16
    19.11. 17:22 | IT novinky

    Microsoft představil Azure Cobalt 200, tj. svůj vlastní SoC (System-on-Chip) postavený na ARM a optimalizovaný pro cloud.

    Ladislav Hagara | Komentářů: 0
    19.11. 12:00 | IT novinky

    Co způsobilo včerejší nejhorší výpadek Cloudflare od roku 2019? Nebyl to kybernetický útok. Vše začalo změnou oprávnění v jednom z databázových systémů a pokračovalo vygenerováním problém způsobujícího konfiguračního souboru a jeho distribucí na všechny počítače Cloudflare. Podrobně v příspěvku na blogu Cloudflare.

    Ladislav Hagara | Komentářů: 3
    18.11. 23:44 | Nová verze

    Byla vydána (Mastodon, 𝕏) první RC verze GIMPu 3.2. Přehled novinek v oznámení o vydání. Podrobně v souboru NEWS na GitLabu.

    Ladislav Hagara | Komentářů: 0
    Jaké řešení používáte k vývoji / práci?
     (35%)
     (46%)
     (19%)
     (18%)
     (23%)
     (15%)
     (23%)
     (15%)
     (17%)
    Celkem 373 hlasů
     Komentářů: 17, poslední 19.11. 21:57
    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: 2001×
    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.