Avatar billede kara Nybegynder
03. juli 2007 - 12:40 Der er 8 kommentarer og
1 løsning

Forespørgsel på forskel i samme kolonne

Jeg har en AccessDB med en masse data omkring et produceret emne.
Der er bla en Sluttid, et mm-dd-yy-hh-mm-ss felt der fortæller hvornår emnet er færdigtestet.

Nu vil jeg gerne kunne lave en forespørgsel der returnerer Produktionstiden. Produktionstiden for Emne1 er den tid, i sekunder, der er gået mellem Emne1 og Emne2's Sluttid, Porduktionstiden for Emne2 er så den tid der er gået mellem Emne2 og Emne3's Sluttid.

Eks. på Tabel1
Navn:  Sluttid:
Emne1  07-03-2007 12:33:24
Emne2  07-03-2007 12:35:33
Emne3  07-03-2007 12:38:08  osv.

Det jeg så gerne skal have vist er følgende

Navn:  Produktionstid (i sek)
Emne2    129
Emne3    155  osv

Jeg er klar over at man nok ikke kan regne på emne1 da der ikke er en Sluttid at sammenligne med, men den usikkerhed er jeg villig til at tage med.
Jeg kender lidt til DateDiff() funktionen, men kan umiddelbart ikke se hvordan jeg regner på felter i samme kolonne.

på forhånd tak
Avatar billede kara Nybegynder
03. juli 2007 - 12:41 #1
<<Produktionstiden for Emne1 er den tid, i sekunder, der er gået mellem Emne1 og Emne2's Sluttid, Porduktionstiden for Emne2 er så den tid der er gået mellem Emne2 og Emne3's Sluttid.>>

Dette skulle selvfølgelig være:

Produktionstiden for Emne2 er den tid, i sekunder, der er gået mellem Emne1 og Emne2's Sluttid, Porduktionstiden for Emne3 er så den tid der er gået mellem Emne2 og Emne3's Sluttid osv.
Avatar billede terry Ekspert
03. juli 2007 - 12:54 #2
How many Emne do you have? Or maybe its juts the next record in the table which is used to make the calculation?

Looking at the example data it looks simple enough but I susspecty that ther are other tings which need to be taken into account
Avatar billede kara Nybegynder
03. juli 2007 - 13:20 #3
I have 19411 Emne (units) atm and the DB will grow =)

So I somehow have to compare Emne(n)'s Sluttid with Emne(n-1)'s Sluttid.
And the difference in seconds is my production time ProdTid for Emne(n).

That means I have to start at Emne2 since Emne1 has no prior Emne to compare to, but I'm willing to add this uncertainty to the resulting query. I later have to use the results in another query, but that is simple. My problem is this, to get the difference in seconds between the timestamps in the same column.

So I end up with a query that returns the time between this Emne and the one just before it.

Eks. of Tabel1
Name:  Endtime:
Emne22  07-03-2007 12:33:24
Emne23  07-03-2007 12:35:33
Emne24  07-03-2007 12:38:08  osv.

resulting in :

Name:  ProductionTime (in seconds)
Emne23    129
Emne24    155 
Emne25  and so on

So basically

SELECT Name, Difference between (EndTime(n) and EndTime(n-1)) As ProductionTime
FROM tabel1

DateDiff() seems to only be able to look at 2 fields in the same row. Which means I would have to have a StartTime in teh same Row to compare, which I dont.
I have to compare an entry with an entry in the previous row if sorted by time ofc. If not it has to compare with the entry just before timewise.

Well enough ranting, hope u get what I mean =)
Avatar billede terry Ekspert
03. juli 2007 - 13:34 #4
Can you be sure that the Emne numbers are in sequence?

What I am trying to get at is, can we always assume that the difference in seconds is calcualted from the previous record?

Can you send me an example of your table  with data in?
ekspertenATsanthell.dk
AT = @
Avatar billede kara Nybegynder
03. juli 2007 - 13:41 #5
Without making a prior ORDER BY on the times, they are not in sequence. But Making an Order By query returning only Name and the time in ASCENDING order shouldnt be a problem. I allready did that. So it should be possible to assume they are in sequence when running a query on the ORDERED query.

I will mail u a scaled down version of the DB asap.
Avatar billede terry Ekspert
03. juli 2007 - 13:48 #6
OK
Avatar billede terry Ekspert
03. juli 2007 - 15:00 #7
:o)
Avatar billede terry Ekspert
03. juli 2007 - 15:01 #8
and the SQl for those interested

SELECT (SELECT Max([DataFine]) FROM Generale L WHERE L.DataFine < G.DataFine) AS LastDataFine, G.DataFine AS ThisDataFine, DateDiff("s",[LastDataFine],[ThisDataFine]) AS ProductionTime
FROM Generale AS G
ORDER BY G.DataFine;
Avatar billede kara Nybegynder
03. juli 2007 - 15:04 #9
=)
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