Avatar billede leasypeter Nybegynder
11. maj 2009 - 09:17 Der er 6 kommentarer og
1 løsning

Forskelsberegning

Jeg har en tabel hvor den skal hente tal fra den foregående post for at finde forskellen.
(B-A), (C-B) osv. Det gemmes i en forespørgsel.

Tid    Tal
18:00    A
19:00    B
20:00    C
osv
Avatar billede Slettet bruger
11. maj 2009 - 09:54 #1
Du laver join på sig selv, så (tid,tiden før) pairs kan hentes fra 'mængdeproduktet'

SELECT Tabel.Tid, 24*(Tabel.Tid-y.Tid) AS periode,Tabel.Tal from Tabel inner Join Tabel as y on y.Tid =dmax("Tid","Tabel","Tid<#" & Tabel.Tid & "#")
Avatar billede leasypeter Nybegynder
11. maj 2009 - 13:15 #2
Skulle nok have præciseret mit problem lidt bedre.

Det er data fra en GPS logger jeg skal behandle data fra.
Efter jeg har ændringen (N-E)kan jeg beregne afstanden.
Lidt som www.autolog.dk



autoID    Tid    GPS(N)
1    18:00    Data
2    18:03    …
3    18:07    …
4    18:15    …
osv
Avatar billede Slettet bruger
11. maj 2009 - 17:33 #3
Hvis jeg har forstået det rigtig, så er det samme udtræk af par af poster, der skal anvendes - du er bare ikke interesseret i tiden, som vist resultat (det jeg felt-navngav: 'periode') - men i funktionalitet af Tabel.GPS,y.GPS (samme tabelnavne som i forrige kommentar)

Hvordan man beregner afstanden mellem to GPS koordinater, aner jeg ikke.
Avatar billede leasypeter Nybegynder
11. maj 2009 - 21:31 #4
Det er rigtigt, det er GPSdata der interessant. Tiden en kun nice, men har jeg gps formlen er bare at ændre indhold.
Jeg prøvede at rette i formlen uden held.

Afstand imellem har jeg styr på. c",)
Avatar billede kjulius Novice
19. august 2009 - 14:56 #5
Den slags er SQL ikke optimal til at beregne. Normalt ville man gøre det i VBA koden, hvor de sorterede rækker gennemløbes og sammenlignes med data fra foregående række.

Jeg siger ikke, at det ikke *kan* lade sig gøre i et SQL-view, men det vil langt fra være optimalt, da den for hver række skal finde ud af, hvilken række der er den foregående via en konstruktion som:

SELECT t1.id, t1.tidsp, t1.gpsn, t2.id, t2.tidsp, t2.gpsn
FROM tabel AS t1, tabel AS t2
WHERE t2.id=(SELECT MAX(id) FROM tabel WHERE id < t1.id)

Med andre ord, for hver række der læses i den ene tabel, skal databasemotoren finde den højeste værdi af ID, som samtidig er mindre end ID fra tabellen. Denne værdi bruges til at finde frem til den rigtige række i tabel 2.
Tabellen skal altså åbnes i tre forskellige versioner ("cursors"), hvoraf kun den ene kan læses sekventielt.

Det er en halv-tung proces, som kun bliver tungere, jo flere rækker der er i tabellen.


Snakker jeg sort?
Avatar billede leasypeter Nybegynder
19. august 2009 - 23:14 #6
Tak for svaret, men har fundet ud af noget andet.
Ville have lukket/ slettet spørgsmålet, men kan ikke se hvordan.
Avatar billede leasypeter Nybegynder
19. august 2009 - 23:15 #7
Fandt ud af det...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester