Byla vydána nová stabilní verze 24.05 linuxové distribuce NixOS (Wikipedie). Její kódové označení je Uakari. Podrobný přehled novinek v poznámkách k vydání. O balíčky se v NixOS stará správce balíčků Nix.
Byla vydána nová verze 1.48.0 sady nástrojů pro správu síťových připojení NetworkManager. Novinkám se v příspěvku na blogu NetworkManageru věnuje Fernando F. Mancera. Mimo jiné se v nastavení místo mac-address-blacklist nově používá mac-address-denylist.
Před 25 lety, 31. května 1999, započal vývoj grafického editoru Krita (Wikipedie). Tenkrát ještě pod názvem KImageShop a později pod názvem Krayon.
Farid Abdelnour se v příspěvku na blogu rozepsal o novinkám v nejnovější verzi 24.05.0 editoru videa Kdenlive (Wikipedie). Ke stažení brzy také na Flathubu.
David Revoy, autor mj. komiksu Pepper&Carrot, se rozepsal o své aktuální grafické pracovní stanici: Debian 12 Bookworm, okenní systém X11, KDE Plasma 5.27, …
Wayland (Wikipedie) byl vydán ve verzi 1.23.0. Z novinek lze vypíchnout podporu OpenBSD.
Craig Loewen na blogu Microsoftu představil novinky ve Windows Subsystému pro Linux (WSL). Vypíchnout lze GUI aplikaci pro nastavování WSL nebo správu WSL z Dev Home.
V sobotu 1. června lze navštívit Maker Faire Ostrava, festival plný workshopů, interaktivních činností a především nadšených a zvídavých lidí.
Webový server Caddy (Wikipedie) s celou řadou zajímavých vlastností byl vydán ve verzi 2.8 (𝕏). Přehled novinek na GitHubu.
Byla vydána verze 3.0 (@, 𝕏) svobodného softwaru HAProxy (The Reliable, High Performance TCP/HTTP Load Balancer; Wikipedie) řešícího vysokou dostupnost, vyvažování zátěže a reverzní proxy. Detailní přehled novinek v příspěvku na blogu společnosti HAProxy Technologies.
insert into hodnoty (id,hodnota,datum_od,datum_do) values (1,3.300,'2018-01-01','2019-12-31'), (1,3.600,'2020-01-01','2020-11-31'), (1,3.850,'2021-01-01','2021-12-31'), (1,4.000,'2022-01-01','2022-12-31'), (1,4.350,'2023-01-01','2023-12-31'), (1,4.700,'2024-01-01','3333-03-03'), (2,3.300,'2018-01-01','2019-12-31'), (2,3.600,'2020-01-01','2020-12-31'), (2,3.850,'2021-01-01','2021-12-31'), (2,4.000,'2022-01-01','2022-12-31'); (2,4.350,'2023-01-01','2023-12-31'), (2,4.700,'2024-01-01','3333-03-03'), (3,2.848,'2018-01-01','2018-08-31'), (3,2.943,'2018-09-01','2018-12-31'), (3,3.188,'2019-01-01','2019-12-31'), (3,3.555,'2020-01-01','2020-12-31'), (3,3.819,'2020-12-01','2021-12-31'), (3,3.961,'2022-01-01','2022-12-31'), (3,4.291,'2023-01-01','2023-12-31'), (3,4.597,'2024-01-01','3333-03-03');su v nej id ktore maju urcitu casovu platnost. je mozne priamo v sql zistit, ci sa pre jednotlive id datumove intervaly neprekryvaju(t.j. ci id nema v dany datum viacero moznych hodnot) a zaroven ci nie su v intervaloch medzery(t.z. ci neexistuje datum pre ktory id nema ziadnu hodnotu)? v priklade ako najmensi mozny datum je 2018-01-01 a najvyssi 3333-03-03. pre id=1 napr. chybaju hodnoty pre december 2020. pre id=3 su zase pre interval datumov december 2020 platne 2 hodnoty(3.555 aj 3.819 co je nespravne). je mozne tieto chyby v integrite dat nejako lahko vyselektovat? dakujem.
select * from hodnoty h1 join hodnoty h2 on daterange(h1.datum_od, h1.datum_do, '[]') && daterange(h2.datum_od, h2.datum_do, '[]') and h1.id < h2.id;A jestli něco nechybí můžeš zjistit tak, že porovnáš součty délek intervalů s intervalem (nejmenší datum, největší). V mariadb možná bude potřeba napsat vlastní podmínky na porovnání intervalů, nevím, jestli je tam na to funkce.
with t1 as( select id, datediff(max(datum_do), min(datum_od)) + 1 as celkovy_pocet_dni from hodnoty group by id ), t2 as( select id, sum(datediff(datum_do, datum_od) + 1) as sucet_intervalov from hodnoty group by id ), t3 as ( select t1.id as id, celkovy_pocet_dni - sucet_intervalov as rozdiel from t1 left join t2 on t2.id = t1.id having rozdiel != 0 ) select id, case when rozdiel < 0 then 'duplicita datumov' when rozdiel > 0 then 'chybajuci interval datumov' end as chyba from t3 order by t3.id
(1,1.000,'2018-01-01','2018-12-31'), (1,1.000,'2018-01-01','2018-12-31'), (1,1.000,'2020-01-01','2020-12-31')
-- kontrola ci datum_do nie je mensi ako datum_od select *, datediff(h.datum_do, h.datum_od) as pocet_dni from hodnoty as h having pocet_dni < 0 order by h.id, h.datum_od, h.datum_do; -- kontrola ci intervaly datumov na seba plynulo nadvazuju with t1 as ( select h.id, lag(h.datum_do, 1) over ( PARTITION BY h.id order by h.id, h.datum_od, h.datum_do ) as datum_pred, h.datum_od, h.datum_do, lead(h.datum_od, 1) over ( PARTITION BY h.id order by h.id, h.datum_od, h.datum_do ) as datum_po from hodnoty as h order by h.id, h.datum_od, h.datum_do ) select id, datum_pred, case when datediff(datum_od, datum_pred) is NULL then 'OK' when datediff(datum_od, datum_pred) = 1 then 'OK' else 'CHYBA' end as stav_1, datum_od, datum_do, case when datediff(datum_po, datum_do) is NULL then 'OK' when datediff(datum_po, datum_do) = 1 then 'OK' else 'CHYBA' end as stav_2, datum_po from t1 having stav_1 = 'CHYBA' or stav_2 = 'CHYBA'skusil som to vyriesit pomocou LAG a LEAD. rozdelil som to do dvoch krokov. najskor sa skontroluje ci su v poriadku jednotlive datumove intervaly. a v druhom kroku sa skontroluje ci intervaly pre jednotlive id na seba nadvazuju a neprekryvaju sa. vie mi to niekto skontrolovat ci tam zase nie je nejaka chyba? nejaky pripad pri ktorom by kontrola zlyhala?
select
A.*
,B.*
from hodnoty A
join hodnoty B on A.id = b.id and A.datum_do >= B.datum_od and A.datum_od <= B.datum_do
řešení vychází z následujícího obrázku, který ukazuje možné překryvy
A +----------------+ o x o x o x o x +-----+ +----+ +-----+ B B B
Díry v jistém smyslu jsou problematičtější, protože vždycky budete mít díru. A to na začátku a na konci.
select
A.*
,min(B.datum_od)
from hodnoty A
join hodnoty B on A.id = B.id and A.datum_do < B.datum_od
group by A.*
having A.datum_do + interval '1' day < min(B.datum_od)
Rychlejší řešení děr je pomocí analytických funkcí. Konkrétně funkce LAG a LEAD
SELECT id, hodnota, datum_od, datum_do FROM ( SELECT id, hodnota, datum_od, datum_do, LEAD(datum_od) OVER (PARTITION BY id ORDER BY datum_od) AS next_datum_od FROM hodnoty ) AS t WHERE datum_do >= next_datum_od; SELECT id, hodnota, datum_od, datum_do FROM ( SELECT id, hodnota, datum_od, datum_do, LAG(datum_do) OVER (PARTITION BY id ORDER BY datum_od) AS prev_datum_do FROM hodnoty ) AS t WHERE datum_od > DATE_ADD(prev_datum_do, INTERVAL 1 DAY);
Tiskni Sdílej: