logi sisse meist KKK

Tere Mul on tabel erinevate aegadega. Vaja oleks näha keskmisi aegasi erinevate aegade vahel.

Toon toimiva näite, mis arvutab aritmeetilist keskmist aega nende vahel. Vaja oleks see muuta nii et näitaks mediaani. Mediaan on positsiooniline keskmine. Kui ajad järjestada kasvavas järjekorras, siis keskmine positsioon on mediaan.

Selle saan muidugi leida üksiku ajavahe puhul mysql manuaalist toodud näite abil SELECT x.val from data x, data y GROUP BY x.val HAVING SUM(SIGN(1-SIGN(y.val-x.val))) = (COUNT(*)+1)/2

Kuna mul on aegasid umbes 10 ja erinevaid gruppe (6) ja liike (ca.30) ka päris palju siis ma pean iga nn. lahtri jaoks uue päringu moodustama, mis teeb lehe väga aeglaseks. Olemasoleva päringuga saan need korraga kätte.

SELECT grupp, liik, count(*) as summa,
sec_to_time(avg(time_to_sec(timediff(aeg2,aeg1)))) as vahe1,
sec_to_time(avg(time_to_sec(timediff(aeg3,aeg2)))) as vahe2,
... ja nii umbes 10 aega ...
FROM tabel WHERE mingid_lisatingimused
GROUP by grupp, liik

küsitud Jan 30 '12 at 18:48

Arvi's gravatar image

Arvi
41113


Võib-olla VIEW tegemine aitab... ehk siis midagi sellist:

CREATE VIEW Vahed AS
    SELECT grupp, liik, ... (muud asjad mida filtrites kasutad)
        time_to_sec(timediff(aeg2,aeg1)) as vahe1,
        time_to_sec(timediff(aeg3,aeg2)) as vahe2,
        ...
FROM table

SELECT grupp, liik, avg(vahe1), avg(vahe2) ...
FROM Vahed
WHERE lisatingimused
GROUP BY grupp, liik
link

vastatud Jan 30 '12 at 20:33

egon's gravatar image

egon ♦♦
771239

edited Jan 30 '12 at 20:35

Jah aga siin on sama avg mis ei sobi, vaja oleks mediani.

(Jan 30 '12 at 20:47) Arvi

Tere Sain asja valmis ja töötab üsna hästi. Ei ole märgatavat kiiruse vahet tunda kui arvutan mediaane.

Teen täispäringu andmebaasi, saamaks erinevate aegade sekundilised vahed.

$sql_median="select yksus, liik,

time_to_sec(timediff(vsoidu_aeg,teate_aeg)) as reag,

time_to_sec(timediff(sk_saab,teate_aeg)) as joudmine,

...

where tingimused

Andmed kogun nii massiivi

$med["reag"][$row["liik"]][$row["yksus"]][]=$row["reag"];

$med["joudmine"][$row["liik"]][$row["yksus"]][]=$row["joudmine"];

.....

Ja lisaks aritmeetilisele näidatakse vastavas kohas mediaani nii Median($med[$var_lahter][$var_liik][$var_yksus])

Median funktsioon ise on selline

PHP kood:

function Median($massiiv){ // massiivis on iga element sekundites.
    if (is_array($massiiv)){ // kas ikka on massiiv
        for ($i = 0; $i < count($massiiv); $i++) {  
            if ($massiiv[$i] == null) unset($massiiv[$i]); // eemaldame null väärtused
        }
        $count = count($massiiv); // massiivi pikkus
        sort($massiiv, SORT_NUMERIC); //sorteerime ära 
        if($count < 2)
            $aeg = false;
        if($count === 2)
            $aeg = ($massiiv[0] + $massiiv[1])/2;
        if($count % 2)
            $aeg = $massiiv[($count/2)];
        else
            $aeg = ($massiiv[($count/2)] + $massiiv[($count/2 - 1)])/2 ;
        return gmdate("H:i:s",$aeg); // väljastame aja
    }else
    return false;
}
link

vastatud Feb 14 '12 at 20:42

Arvi's gravatar image

Arvi
41113

edited Feb 14 '12 at 20:45

Sinu vastus
lülita eelvaade

Jälgi seda küsimust

By Email:

Pärast sisselogimist saad tellida muudatuse teavitusi siit

By RSS:

Answers

Answers and Comments

Markdown Basics

  • *kaldkiri* või __kaldkiri__
  • **paks kiri** või __paks kiri__
  • link:[tekst](http://url.com/ "pealkiri")
  • pilt?![alt tekst](/path/img.jpg "pealkiri")
  • nummerdatud nimekiri: 1. Foo 2. Bar
  • to add a line break simply add two spaces to where you would like the new line to be.
  • põhilised HTML märgendid on samuti toetatud

Pinu tööpakkumised

kõik pakkumised »

Küsimuse sildid:

×9

küsitud: Jan 30 '12 at 18:48

nähtud: 2,595 korda

viimati uuendatud: Feb 14 '12 at 20:45

Litsents: Creative Commons Attribution License | Kontakt: info@pinu.ee