Access: izračun povprečja
Access: izračun povprečja
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.
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.
Re: Access: izračun povprečja
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:
Seveda pod predpostavko, da se vaša tabela imenuje Temperature in vsebje polji Ura in Temperatura
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;
lp,
Matjaž Prtenjak
Administrator
Matjaž Prtenjak
Administrator
Re: Access: izračun povprečja
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...
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...
Re: Access: izračun povprečja
Pozdravljeni,
Koda, ki ste jo zapisali je čisto pravilna
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!
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 ...
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;
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.Rolle napisal/-a:Kaj v tej kodi pomeni T1.temperatura?
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
Matjaž Prtenjak
Administrator
Re: Access: izračun povprečja
Š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:
To mi normalno dela in ni težav....
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
Re: Access: izračun povprečja
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:
vrne več kot 1 zapis... Vrne vam 24 zapisov oz. toliko zapisov, kot jih imate v tabeli...
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
lp,
Matjaž Prtenjak
Administrator
Matjaž Prtenjak
Administrator
Re: Access: izračun povprečja
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...
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...
Re: Access: izračun povprečja
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!
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
Matjaž Prtenjak
Administrator
Re: Access: izračun povprečja
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č!
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č!
Re: Access: izračun povprečja
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:
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.
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
lp,
Matjaž Prtenjak
Administrator
Matjaž Prtenjak
Administrator
Re: Access: izračun povprečja
Sedaj mi je jasno. Hvala.
lp
lp
Re: Access: izračun povprečja
Š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?
Re: Access: izračun povprečja
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:
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
Matjaž Prtenjak
Administrator
Re: Access: izračun povprečja
Verjetno je to res najboljša rešitev. Hvala.
Lp
Lp