..|| Blog || Produkti/Storitve || MExcel || MDodatki || 300 nasvetov ||..

Access: izračun povprečja

Preostalo o MS Pisarni

Access: izračun povprečja

OdgovorNapisal/-a Rolle » To jun 26, 2012 3:10 pm

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.
Rolle
 
Prispevkov: 36
Pridružen: Sr sep 23, 2009 1:28 pm



Matjazev.NET
 

Re: Access: izračun povprečja

OdgovorNapisal/-a admin » To jun 26, 2012 3:39 pm

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
admin
Site Admin
 
Prispevkov: 3492
Pridružen: Sr jul 20, 2005 10:06 pm

Re: Access: izračun povprečja

OdgovorNapisal/-a Rolle » Sr jun 27, 2012 10:41 am

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...
Rolle
 
Prispevkov: 36
Pridružen: Sr sep 23, 2009 1:28 pm

Re: Access: izračun povprečja

OdgovorNapisal/-a admin » Sr jun 27, 2012 10:53 am

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 je 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
admin
Site Admin
 
Prispevkov: 3492
Pridružen: Sr jul 20, 2005 10:06 pm

Re: Access: izračun povprečja

OdgovorNapisal/-a Rolle » Sr jun 27, 2012 2:22 pm

Š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....
Rolle
 
Prispevkov: 36
Pridružen: Sr sep 23, 2009 1:28 pm

Re: Access: izračun povprečja

OdgovorNapisal/-a admin » Sr jun 27, 2012 2:35 pm

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
admin
Site Admin
 
Prispevkov: 3492
Pridružen: Sr jul 20, 2005 10:06 pm

Re: Access: izračun povprečja

OdgovorNapisal/-a Rolle » Sr jun 27, 2012 2:41 pm

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...
Rolle
 
Prispevkov: 36
Pridružen: Sr sep 23, 2009 1:28 pm

Re: Access: izračun povprečja

OdgovorNapisal/-a admin » Sr jun 27, 2012 2:46 pm

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
admin
Site Admin
 
Prispevkov: 3492
Pridružen: Sr jul 20, 2005 10:06 pm

Re: Access: izračun povprečja

OdgovorNapisal/-a Rolle » Sr jun 27, 2012 3:09 pm

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č!
Rolle
 
Prispevkov: 36
Pridružen: Sr sep 23, 2009 1:28 pm

Re: Access: izračun povprečja

OdgovorNapisal/-a admin » Sr jun 27, 2012 3:15 pm

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
admin
Site Admin
 
Prispevkov: 3492
Pridružen: Sr jul 20, 2005 10:06 pm

Re: Access: izračun povprečja

OdgovorNapisal/-a Rolle » Sr jun 27, 2012 4:16 pm

Sedaj mi je jasno. Hvala.

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

Re: Access: izračun povprečja

OdgovorNapisal/-a Rolle » Če jun 28, 2012 11:27 am

Š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?
Rolle
 
Prispevkov: 36
Pridružen: Sr sep 23, 2009 1:28 pm

Re: Access: izračun povprečja

OdgovorNapisal/-a admin » Če jun 28, 2012 11:45 am

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
admin
Site Admin
 
Prispevkov: 3492
Pridružen: Sr jul 20, 2005 10:06 pm

Re: Access: izračun povprečja

OdgovorNapisal/-a Rolle » Če jun 28, 2012 12:17 pm

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

Lp
Rolle
 
Prispevkov: 36
Pridružen: Sr sep 23, 2009 1:28 pm


Vrni se na Ostalo

Kdo je prisoten

Po forumu brska: 0 registriranih uporabnikov in 1 gost

cron