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.
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í.
Hodnota Bitcoinu, decentralizované kryptoměny klesla pod 70 000 dolarů (1,44 milionu korun).
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.“
Do 20. února lze hlasovat pro wallpapery pro Ubuntu 26.04 s kódovým názvem Resolute Raccoon.
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.
Na Kickstarteru běží kampaň na podporu modulárního otevřeného handheldu Mecha Comet s Linuxem.
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.
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.
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 »VARCHAR username TEXT msg DATE created_atA 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
DELETE starsi nez mesic EXCEPT (SELECT prvni tri starsi nez mesic pro kazdeho usera);
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
;
Tiskni
Sdílej: