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 11:44 | Nová verze

Glen MacArthur vydal verzi 2018.4.2 na Debianu založené linuxové distribuce optimalizované pro tvůrce audio a video obsahu AV Linux (Wikipedie). Podrobnosti v oznámení o vydání a v stotřicetistránkovém manuálu (pdf).

Ladislav Hagara | Komentářů: 0
včera 23:33 | Nová verze

Byla vydána nová stabilní verze 1.15 (1.15.1147.36) webového prohlížeče Vivaldi (Wikipedie). Z novinek lze zdůraznit možnost nastavení vlastního pozadí okna, přístup k záložkám z hlavního menu, lepší ovládatelnost v režimu celé obrazovky nebo vyřešení problémů se zvukem v HTML5. Nejnovější Vivaldi je postaveno na Chromiu 65.0.3325.183.

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

Node.js Foundation, oficiální projekt konsorcia Linux Foundation, oznámila vydání verze 10.0.0 otevřeného multiplatformního prostředí pro vývoj a běh síťových aplikací napsaných v JavaScriptu Node.js (Wikipedie). Verze 10 se v říjnu stane novou aktivní LTS verzí. Podpora je plánována do dubna 2021.

Ladislav Hagara | Komentářů: 0
včera 15:33 | Nová verze

Neal Cardwell ze společnosti Google oznámil zveřejnění verze 2.0 nástroje pro testování síťového stacku packetdrill. Jde o souhrnné vydání změn z interního vývoje od roku 2013.

Michal Kubeček | Komentářů: 0
včera 13:22 | Zajímavý software

Microsoft na svém blogu oznámil, že správce knihoven pro C++ Vcpkg (VC++ Packaging Tool) lze nově používat také na Linuxu a macOS. Aktuálně je pro Linux k dispozici více než 350 knihoven [reddit].

Ladislav Hagara | Komentářů: 1
včera 12:44 | Komunita

Byly zveřejněny exploity na Nintendo Switch a platformu Tegra X1: Fusée Gelée a ShofEL2. Jejich zneužití nelze zabránit softwarovou aktualizací. Na druhou stranu exploity umožní na Nintendo Switch snadno a rychle nainstalovat Linux, viz. ukázka na YouTube. Jenom je potřeba sáhnout na hardware.

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

Byla vydána verze 2.12.0 QEMU (Wikipedie). Přispělo 204 vývojářů. Provedeno bylo více než 2 700 commitů. Přehled úprav a nových vlastností v seznamu změn. Řešeny jsou také bezpečnostní chyby Meltdown a Spectre.

Ladislav Hagara | Komentářů: 7
včera 00:33 | Komunita

Google zveřejnil seznam 1 264 studentů přijatých do letošního Google Summer of Code. Přehled projektů, studentů, 212 organizací a mentorů je k dispozici na stránkách GSoC.

Ladislav Hagara | Komentářů: 0
24.4. 23:55 | Nová verze

Oracle vydal verzi 1.0 univerzálního virtuálního stroje GraalVM, který umožňuje běh programů napsaných v jazycích založených na JVM, JavaScript, LLVM bitcode a experimentálně Ruby, R a Python.

razor | Komentářů: 1
24.4. 01:22 | Zajímavý článek

Julia Evans pomocí svých kreslených obrázků proniká do Linuxu a informačních technologií. Vedle ucelených zinů publikuje také jednotlivé kreslené obrázky (RSS).

Ladislav Hagara | Komentářů: 5
Používáte na serverech port knocking?
 (3%)
 (7%)
 (46%)
 (26%)
 (18%)
Celkem 383 hlasů
 Komentářů: 29, poslední 5.4. 12:25
    Rozcestník

    Dotaz: Spotřeba vody za období ze stavu vodoměru

    7.10.2014 01:00 pedro
    Spotřeba vody za období ze stavu vodoměru
    Přečteno: 1372×
    Zdravím,

    asi nejsem dost zkušený, problém vypadá triviálně, ale lámu si hlavu s elegantním řešením.

    Mějme tabulku datum date,stav integer. Například:
    1.3.2014 1000
    1.6.2014 1500
    1.9.2014 2100
    
    což je datum a stav vodoměru v daný den. Chci z toho dostat toto:
    1.3.2014-1.6.2014 500
    1.6.2014-1.9.2014 600
    
    tedy kolik se spotřebovalo vody vždy mezi jednotlivými zápisy. Prosím o radu na elegantní řešení v PostgreSQL.

    Díky.

    Řešení dotazu:


    Odpovědi

    Tarmaq avatar 7.10.2014 09:17 Tarmaq | skóre: 39
    Rozbalit Rozbalit vše Re: Spotřeba vody za období ze stavu vodoměru
    SELECT s1.datum AS od, s2.datum AS do, s2.stav - s1.stav AS rozdil
    FROM spotreba_vody s1
    CROSS JOIN spotreba_vody s2
    WHERE s1.datum < s2.datum
    
    Na PostgreSQL netestovano, ale melo by to fungovat. Ma to jednu odlisnost, vraci to i rozdil mezi 1.3. a 1.9.
    Don't panic!
    Tarmaq avatar 7.10.2014 09:52 Tarmaq | skóre: 39
    Rozbalit Rozbalit vše Re: Spotřeba vody za období ze stavu vodoměru
    SELECT x.od, x.do, s2.stav - s1.stav AS rozdil
    FROM
    (
      SELECT 
        x1.datum AS od
      , (SELECT MIN(x2.datum) FROM spotreba_vody x2 WHERE x2.datum > x1.datum) AS do
      FROM spotreba_vody x1
    ) x
    JOIN spotreba_vody s1 ON s1.datum = x.od
    JOIN spotreba_vody s2 ON s2.datum = x.do
    
    Tohle vrati jen ty dva zaznamy, ale opet nevim, jestli funguje i na postgresu..
    Don't panic!
    7.10.2014 09:36 Tomáš
    Rozbalit Rozbalit vše Re: Spotřeba vody za období ze stavu vodoměru

    Máte dvě možnosti. První méně efektivní se self joinem a druhý lepší s window funkcemi.

    1. select 
        A.dt
        ,min(B.dt)
        ,min(B.val order by B.dt)-A.val 
      from T as A 
      join T as B on A.dt<B.dt 
      group by A.*
      
    2. select 
        A.dt
        ,max(A.dt) over( order by A.dt rows between current row and 1 following)
        ,max(A.val) over( order by A.dt rows between current row and 1 following)-A.val
      from A
      

    Psáno bez jakékoliv kontroly, takže tam budou asi nějaké chybky. Ale jako nápověda je to dostatečné. BTW: Co když není datum unikátní?

    rADOn avatar 7.10.2014 13:45 rADOn | skóre: 44 | blog: bloK | Praha
    Rozbalit Rozbalit vše Re: Spotřeba vody za období ze stavu vodoměru
    Ta druha varianta se mi libi… umi neco takovyho mysql?
    "2^24 comments ought to be enough for anyone" -- CmdrTaco
    7.10.2014 14:11 Tomáš
    Rozbalit Rozbalit vše Re: Spotřeba vody za období ze stavu vodoměru
    Pokud vím, tak ne. Musel by jste si pomoci cursorem.
    7.10.2014 16:01 pedro
    Rozbalit Rozbalit vše Re: Spotřeba vody za období ze stavu vodoměru
    Z hlavy (skoro) perfektní, jen na konci zbude řádek, kde je stejné počáteční i koncové datum a nulová spotřeba. Výsledný select tedy vypadá takto:
    select * from
    (
    select
      voda.datum as zacatek
      ,max(voda.datum) over( order by voda.datum rows between current row and 1 following) as konec
      ,max(voda.stav) over( order by voda.datum rows between current row and 1 following)-voda.stav as spotreba
    from myschema.voda
    ) foo
    where zacatek != konec;
    
    Nejedinečné datum s různými stavy vodoměru je blbost, tak přidán constraint (ve skutečnosti je to timestamp, ne datum).

    K dokonalosti ještě chybí ošetřit přetočení či výměnu vodoměru, ale to teď řešit nebudu.
    Řešení 1× (Tarmaq)
    okbob avatar 7.10.2014 11:46 okbob | skóre: 30 | blog: systemakuv_blog | Benešov
    Rozbalit Rozbalit vše Re: Spotřeba vody za období ze stavu vodoměru
    Co např.:
    postgres=> select * 
                  from (select mereno, hodnota - lag(hodnota) over (order by mereno) as spotreba 
                           from odecet order by 1) s 
                 where spotreba is not null;
       mereno   | spotreba 
    ------------+----------
     2014-01-06 |      500
     2014-01-09 |      600
    (2 rows)
    
    Kartézákům se pokud možno vyhýbejte - pro větší data to může být docela pomalé, a navíc zápis s window funckcemi je výrazně čitelnější.
    7.10.2014 15:37 pedro
    Rozbalit Rozbalit vše Re: Spotřeba vody za období ze stavu vodoměru
    Moc všem děkuji. Ano, šlo mi hlavně o window funkce, které jsem pro sebe objevil teprve včera ;).

    Kartézákům jsem se chtěl vyhnout, ačkoli v mém případě by to asi nevadilo, protože se jedná skutečně o vodoměr v bytovém domě a asi ho nebudu odečítat častěji než 1x týdně, takže i za léta řádově stovky řádků.

    Tak teď ještě ty window funkce pochopit a naučit se je.

    S vodou není legrace, jeden protékající záchod v domě dokáže udělat na faktuře za vodu opravdu pořádný vítr.

    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.