Access: izračun povprečja

Preostalo o MS Pisarni
Odgovori
Rolle
Prispevkov: 36
Pridružen: Sr Sep 23, 2009 1:28 pm

Access: izračun povprečja

Odgovor Napisal/-a Rolle »

V Accessu 2007 bi rad dobil nalsednje:
V prvem stolpcu imam 24 ur (1,2,3…24) , v sosednjem stolpcu imam podane temperature za vsako uro. V tretjem stolpcu pa bi rad dobil povprečno temperaturo med dvema zaporednima urama. Kako bi to naredil na čim bolj enostaven način, tako da bi se mi povprečna temperatura izpisala v vrstico s prvo od obeh ur?
Primer:
Ura Temp. Povpr.temp
0 3,2 (3,2+4,1)/2
1 4,1 (4,1+4,2)/2
2 4,2 itd

Hvala za nasvet.
admin
Site Admin
Prispevkov: 3687
Pridružen: Sr Jul 20, 2005 10:06 pm

Re: Access: izračun povprečja

Odgovor Napisal/-a admin »

Pozdravljeni,

Imate srečo, da potrebujete samo eno prejšnjo temperaturo, saj je sicer naloga takšnega tipa v SQL-u dokaj težko rešljiva... V vašem primeru pa je stvar praktično točno takšna, kot set vi zapisali v primeru, SQL torej izgleda takole:

Koda: Izberi vse

SELECT T.URA, T.Temperatura, (T.Temperatura + (select T1.Temperatura FROM temperature T1 where t1.ura = t.ura+1)) / 2
FROM temperature T;
Seveda pod predpostavko, da se vaša tabela imenuje Temperature in vsebje polji Ura in Temperatura
lp,
Matjaž Prtenjak
Administrator
Rolle
Prispevkov: 36
Pridružen: Sr Sep 23, 2009 1:28 pm

Re: Access: izračun povprečja

Odgovor Napisal/-a Rolle »

Pozdravljeni,

Tabela se imenuje tblTemperature in v tej tabeli se nahajata stolpca Ura in Temperatura. Vašo kodo sem samo modificiral, vendar mi javi da "Podpoizvedba vrne lahko največ en zapis"

[code]SELECT T.URA, T.Temperatura, (T.Temperatura + (select T1.Temperatura FROM tbltemperature T1 where t1.ura = t.ura+1)) / 2
FROM tbltemperature T;[/code]

Je mogoče problem v kodi? bi morala biti takšna?
[code]SELECT TblTemperature.URA, TblTemperature.Temperatura, ( TblTemperature.Temperatura + (select T1.Temperatura FROM tbltemperature T1 where t1.ura = t.ura+1)) / 2
FROM tbltemperature T;[/code]

Kaj v tej kodi pomeni T1.temperatura?

V accessu se še učim, zato mi kakšni detajli še niso čisto jasni...
admin
Site Admin
Prispevkov: 3687
Pridružen: Sr Jul 20, 2005 10:06 pm

Re: Access: izračun povprečja

Odgovor Napisal/-a admin »

Pozdravljeni,

Koda, ki ste jo zapisali je čisto pravilna

Koda: Izberi vse

SELECT T.URA, T.Temperatura, (T.Temperatura + (select T1.Temperatura FROM tbltemperature T1 where t1.ura = t.ura+1)) / 2
FROM tbltemperature T;
Torej problem ni v kodi, kvečjemu v tem, KAM ste jo vi zapisali? To je SQL povpraševanje in ga zatorej morate zapisati tja... To naredite tako, da izdelate novo povpraševanje in potem preklopite SQL način ter to kodo kopirate tja!
Rolle napisal/-a:Kaj v tej kodi pomeni T1.temperatura?
To je samo okrajšava za sklic na tabelo. V prvem delu stavka so vsi elementi iz tabele z okrajšavo T, v drugem pa iz tabele z okrajšavo T1.
vse kar vam pišem oz. odgovarjam je čista SQL sintaksa in nima neposredne zveze z Accessom, razen v tolikor seveda, da Access pač pozna SQl :)...
lp,
Matjaž Prtenjak
Administrator
Rolle
Prispevkov: 36
Pridružen: Sr Sep 23, 2009 1:28 pm

Re: Access: izračun povprečja

Odgovor Napisal/-a Rolle »

Še zmeraj ni nekaj ne dela. Je možno da je to povezano s tem, ker imam na svoji mašini inštalirane Slo office 2007?

Primer: če želim narediti produkt temperature*2, torej če temperaturo povečam za faktor 2x, je sintaxa takšna:

Koda: Izberi vse

SELECT tblTemperature.Ura, tblTemperature.Temperatura, [tblTemperature]![Temperatura]*2 AS produkt
FROM tblTemperature
To mi normalno dela in ni težav....
admin
Site Admin
Prispevkov: 3687
Pridružen: Sr Jul 20, 2005 10:06 pm

Re: Access: izračun povprečja

Odgovor Napisal/-a admin »

hm...

Saj sintaksa je čisto OK... problematično je sporočilo: "Podpoizvedba vrne lahko največ en zapis", saj ni smiselno, zato me zanima, kam vi vpisujeto to kodo? Zakaj bi lahko poizvedba vrnila samo en zapis, saj tudi poizvedba, ki ste jo vi zapisali in ki jo lahko sicer krajše zapišete kar kot:

Koda: Izberi vse

SELECT Ura, Temperatura, Temperatura*2 AS produkt FROM tblTemperature
vrne več kot 1 zapis... Vrne vam 24 zapisov oz. toliko zapisov, kot jih imate v tabeli...
lp,
Matjaž Prtenjak
Administrator
Rolle
Prispevkov: 36
Pridružen: Sr Sep 23, 2009 1:28 pm

Re: Access: izračun povprečja

Odgovor Napisal/-a Rolle »

Postopek je sledeč:

Ustvari-->Načrt poizvedbe-->potem preklopim na SQL pogled in nato notri skopiram vašo kodo. in ko želim zagnati (rdeči klicaj) se mi izpiše omenjeno sporočilo...
admin
Site Admin
Prispevkov: 3687
Pridružen: Sr Jul 20, 2005 10:06 pm

Re: Access: izračun povprečja

Odgovor Napisal/-a admin »

Ah da... vse je ok. Vi imate v tabeli več kot 24 ur oz. se vam ure ponavljajo(!) in potem stvar seveda ne dela. V tem primeru vam manjka še datum, kako pa naj Access ve katero uro 11 naj upošteva pri določeni uri 10!

Ali drugače; ko Access naleti na uro 10 in bi ji moral prišteti uro 11 - katero pa naj prištje, če je v tabeli več 11 ur. Če imate v tabeli več kot 24 zapisov potem potrebujete zraven še datum!

Koda: Izberi vse

SELECT T.Datum, T.URA, T.Temperatura, (T.Temperatura + (select T1.Temperatura FROM temperature T1 where t1.Datum = t.Datum and t1.ura = t.ura+1)) / 2
FROM temperature T;
lp,
Matjaž Prtenjak
Administrator
Rolle
Prispevkov: 36
Pridružen: Sr Sep 23, 2009 1:28 pm

Re: Access: izračun povprečja

Odgovor Napisal/-a Rolle »

Res je, v bistvu imam več dni z različnimi temperaturami, poleg tega imam še 11 vremenskih območji, tako da sem sedaj še to vključil v kodo in dela.

Prosim vas edino, če mi lahko še malo pojasnite parametre v sintaksi:

t1.ura...pogleda temperaturo ob prvi naslednji uri t1, recimo ob 1h (začetna ura je 0)?
T1.temperatura...je to temperatura ob prvi naslednji uri v tabeli temperature?

Hvala za pomoč!
admin
Site Admin
Prispevkov: 3687
Pridružen: Sr Jul 20, 2005 10:06 pm

Re: Access: izračun povprečja

Odgovor Napisal/-a admin »

Ne, vi si to čisto narobe predstavljate...

V najinem primeru se dvakrat sklicujeva na isto tabelo. Enkrat kot glavno, po kateri se sprehajava in na vsakem zapisu glavne tabele poiščeva v ISTI tabeli še zapis za naslednjo uro. SQL strežnik pač mora nekako ločiti o kateri tabeli je govora ali o prvi ali o drugi in zato prvo poimenujeva T, drugo pa T1 in potem v notranjem stavku pravzaprav rečeva:

Koda: Izberi vse

select T1.Temperatura FROM temperature T1 where t1.Datum = t.Datum and t1.ura = t.ura+1
Najdi mi temperaturo za datum, ki je enak datumu v prvi tabeli in za uro, ki je za eno večja kot tista v prvi tabeli.
lp,
Matjaž Prtenjak
Administrator
Rolle
Prispevkov: 36
Pridružen: Sr Sep 23, 2009 1:28 pm

Re: Access: izračun povprečja

Odgovor Napisal/-a Rolle »

Sedaj mi je jasno. Hvala.

lp
Rolle
Prispevkov: 36
Pridružen: Sr Sep 23, 2009 1:28 pm

Re: Access: izračun povprečja

Odgovor Napisal/-a Rolle »

Še eno vprašanje imam: pri urnem prehodu iz dneva št.1 na dan št.2, mi povprečja ne izračuna, ampak pusti prazno celico, pač zaradi pogoja t1.datum=t.datum. Kako bi se dalo to rešit znotraj iste poizvedbe?
admin
Site Admin
Prispevkov: 3687
Pridružen: Sr Jul 20, 2005 10:06 pm

Re: Access: izračun povprečja

Odgovor Napisal/-a admin »

Da, res je... Če to vpeljete se SQl stavek kar precej zakomplicira, saj ne pozna vejitev... V glavnem kar težko.

Jaz bi nalogo rešil tako, da bi vpeljal novo polje in ga poimenoval zaporedje. To polje bi imelo številke od 1... naprej in vsak naslednji zapis v tabeli bi imel to številko večjo za 1, SQL stavek pa bi potem izgledal takole:

Koda: Izberi vse

SELECT T.URA, T.Temperatura, (T.Temperatura + (select T1.Temperatura FROM temperature T1 where t1.zaporedje = t.zaporedje + 1)) / 2
FROM temperature T;
lp,
Matjaž Prtenjak
Administrator
Rolle
Prispevkov: 36
Pridružen: Sr Sep 23, 2009 1:28 pm

Re: Access: izračun povprečja

Odgovor Napisal/-a Rolle »

Verjetno je to res najboljša rešitev. Hvala.

Lp
Odgovori