#HACKUJBRNO 2024, byly zveřejněny výsledky a výstupy hackathonu města Brna nad otevřenými městskými daty, který se konal 13. a 14. dubna 2024.
Společnost Volla Systeme stojící za telefony Volla spustila na Kickstarteru kampaň na podporu tabletu Volla Tablet s Volla OS nebo Ubuntu Touch.
Společnost Boston Dynamics oznámila, že humanoidní hydraulický robot HD Atlas šel do důchodu (YouTube). Nastupuje nová vylepšená elektrická varianta (YouTube).
Desktopové prostředí LXQt (Lightweight Qt Desktop Environment, Wikipedie) vzniklé sloučením projektů Razor-qt a LXDE bylo vydáno ve verzi 2.0.0. Přehled novinek v poznámkách k vydání.
Nejvyšší soud podpořil novináře Českého rozhlasu. Nařídil otevřít spor o uchovávání údajů o komunikaci (data retention). Uvedl, že stát odpovídá za porušení práva EU, pokud neprovede řádnou transpozici příslušné směrnice do vnitrostátního práva.
Minulý týden proběhl u CZ.NIC veřejný test aukcí domén. Včera bylo publikováno vyhodnocení a hlavní výstupy tohoto testu.
Byla vydána nová verze 3.5.0 svobodné implementace protokolu RDP (Remote Desktop Protocol) a RDP klienta FreeRDP. Přehled novinek v ChangeLogu. Opraveno bylo 6 bezpečnostních chyb (CVE-2024-32039, CVE-2024-32040, CVE-2024-32041, CVE-2024-32458, CVE-2024-32459 a CVE-2024-32460).
Google Chrome 124 byl prohlášen za stabilní. Nejnovější stabilní verze 124.0.6367.60 přináší řadu oprav a vylepšení (YouTube). Podrobný přehled v poznámkách k vydání. Opraveno bylo 22 bezpečnostních chyb. Vylepšeny byly také nástroje pro vývojáře.
Byla vydána nová verze 9.3 z Debianu vycházející linuxové distribuce DietPi pro (nejenom) jednodeskové počítače. Přehled novinek v poznámkách k vydání. Novinkou je vlastní repozitář DietPi APT.
Byl vydán Mozilla Firefox 125.0.1, první verze z nové řady 125. Přehled novinek v poznámkách k vydání, poznámkách k vydání pro firmy a na stránce věnované vývojářům. Vypíchnout lze podporu kodeku AV1 v Encrypted Media Extensions (EME). Řešeny jsou rovněž bezpečnostní chyby. Nový Firefox 125.0.1 je již k dispozici také na Flathubu a Snapcraftu.
Dobrý den, dejme tomu že mám tuto tabulku
CREATE TABLE n ( id int(11) NOT NULL auto_increment, datum datetime NOT NULL, stav tinyint(1) NOT NULL, PRIMARY KEY (id) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; INSERT INTO n (id, datum, stav) VALUES (1, '2009-01-25 13:26:56', 0), (2, '2009-01-25 13:27:47', 0), (3, '2009-01-25 13:28:23', 0), (4, '2009-01-25 13:28:35', 0), (5, '2009-01-25 13:28:46', 3), (6, '2009-01-25 13:29:01', 3), (7, '2009-01-25 13:29:10', 1), (8, '2009-01-25 14:48:42', 1), (9, '2009-01-25 14:48:48', 1), (10, '2009-01-25 14:48:56', 0), (11, '2009-01-25 14:49:02', 0), (12, '2009-01-25 14:49:08', 0);
To jsem zvědavý jestli takový select jde vytvořit.
Asi bych to řešil procedurou nebo triggerem a další tabulkou.
kdyby tam zadne id nechybelo (byly v rade za sebou) tak neco takoveho?
SELECT n2.id FROM n n1 JOIN n n2 ON (n2.id = n1.id + 1) WHERE n1.stav != n2.stav
Nebo bez ohledu na id jen podle data (id muze byt libovolne) a vcetne prvniho a posledniho radku
SELECT n2.id as id, n2.datum as datum, n2.stav as novy_stav
FROM n n1
RIGHT JOIN n n2 ON (
n2.datum = (SELECT min(datum) FROM n WHERE datum > n1.datum )
)
WHERE n1.stav != n2.stav
OR n2.datum = (SELECT min(datum) FROM n)
OR n2.datum = (SELECT max(datum) FROM n)
Jak píšeš, kdyby tam žádné nechybělo. Na to bych se nespoléhal....
No podle těch id to určitě dělat nebudu, protože nejdou po sobě, jinak to druhé řešení funguje tak jak má, ale je tam problém při větším množství záznamů,
jenom při 200 záznamech mi to trvá nějakých 30s. A když bych měl několik tisíc záznamů, tak už je ten dotaz nepoužitelný.
Máš tam patřičné indexy?
Nejsou tam.
Indexy Ti značně zrychlí selecty, ale zase na úkor insertům. Pokud se do té tabulky nevkládají data po stovkách řádcích, tak se nemusíš bát.
Sice je to OT, ale v Oracle XE by slo by to pomoci analickych dotazu. Postgres pre taky neco takovyho ma.
Nemohlo by (tedy v MySQL) fungovat něco jako:
set @m=-1;select id,datum,@m:=stav from (select * from n order by datum) t where stav<>@m;
Já vím, je to docela drsný
Co se týká výše uvedeného řešení, tak podle mne nefunguje dobře, pokud by bylo více záznamů ve stejný čas.
SELECT * FROM n WHERE stav != predchozi_stavInsert by pak musel být proveden nadvakrát:
INSERT INTO n SET datum = NOW(), stav = $s, predchozi_stav = NULL; SET @predchozi_stav = ( SELECT stav FROM n WHERE datum = ( SELECT MAX(datum) FROM n WHERE datum < NOW() AND predchozi_stav IS NOT NULL ) ); UPDATE n SET predchozi_stav = @predchozi_stav WHERE id = LAST_INSERT_ID();Samotné zjišťování předchozího stavu určitě půjde výrazně zjednodušit. Navíc pokud si ho vyplňující program může mezi jednotlivými inserty pamatovat, nebude to znamenat prakticky žádnou režii navíc (a stačí jeden insert).
Tiskni Sdílej: