Jeg skal analysere noget data, jeg f�r fra forskelllige typer maskiner. Data
kommer som 2 flade filer (semikolon sepereret txt filer), de ser s�ledes ud.
10/22/2009 00:00:00;2800000001425;25;1100;2800011446;0;10/22/2009 07:07:19
10/22/2009 00:00:00;2630000006425;25;1100;2630206060;0;10/22/2009 07:07:22
10/22/2009 00:00:00;2630000006424;25;1100;2630206065;0;10/22/2009 07:07:20
Filen skal forst�s s�ledes:
Dato (skal formateres til 22-10-2009) ; l�benr1 (skal ikke bruges) ;
maskinID ; programID ; l�benr2 (Benyttes kun til at t�lle p�) ; kode(0-31) ;
Tid (skal formateres som tt:mm:ss), st�r ikke altid i r�kkef�lge.
Filerne tilsammen er p� 400-600 MB, og importeret er der mellem 5.5 - 7
mill. poster.
Jeg skal finde den effektive k�retid p� maskinerne, stop over 5 min,
medregnes dog ikke, samt t�lle p� nogle af koderne.
Resultattabel skulle se nogenlunde s�dan ud.
Dato MaskinID ProgramID Tid (sum Tid - stop)
Antal(l�benr2) kode0 kode1 ...kode31
22-10-2009 25 1100 05:14:21
115000 112000 4500 14
22-10-2009 23 1100 07:22:01
147000 145000 3000 147
22-10-2009 14 140 03:25:34
65874 62002 1047 3
For at lave denne udregning har jeg brug for at sortere posterne efter
maskinID og programID, og f� tiden sorteret i stigende orden. Derudover m�
jeg kende tiden for den forrige post, hvis maskinID og programID er den
samme.
Mit f�rste bud p� en l�sning var at oprette et recordset og genneml�be
samtlige poster, og skrive tiden p� den forrige post hvis betingelserne var
opfyldt. Denne l�sning virkede da ogs� fint, men tiden til denne
databehandling blev over 1� time.
Mit andet bud var at skrive posterne til en tabel og oprette en tabel magen
til, med den ene forskel at der var en post mere. Herefter blev ID
(autonummer) begge steder sammenk�det. P� denne m�de, kunne jeg finde den
aktuelle post, samt tiden p� forrige post ved en simpel foresp�rgsel.
Resultat: tiden var nede p� 20 min. Problemet med denne l�sning er blot, at
koden fejler n�r access n�r max. gr�nsen p� 2 GB.
En l�sning kunne ogs� v�re at behandle filerne i hver sin databasen, men jeg
ville gerne have data samlet.
En anden tanke at lave en array funktion der behandler posterne inden de
skrives til resultattabellen - men denne l�sning kan jeg ikke selv lave.
Den rigtige l�sning er nok en SQL server, men en s�dan er desv�rre ikke til
r�dighed.
Er der nogen der har et bud p� l�sning?
Jeg arbejder i Access 2003
Mvh.
Per L.
> Dato MaskinID ProgramID Tid (sum Tid - stop)
> Antal(løbenr2) kode0 kode1 ...kode31
For den gruppe poster der har identisk (maskinID,ProgramID,kode),
hvordan ses det hvad der er start/stop? Hvis der er flere af disse, er
det garanteret at der er et stoptidspunkt post til hver starttidspunkt
post?
Alle de poster fremkommer n�ソスr en r�ソスkke fotoceller p�ソスvirkes.
Hvis vi kigger isoleret p�ソス en bestemt maskine og et bestemt program, havde
jeg t�ソスnkt udregningen kunne v�ソスre s�ソスledes.
Man opretter et/to felter mere i tabellen til den forrige post (Tidf�ソスr), s�ソス
man kan beregne forskellen mellen disse tider og summe dem til slut.
Hvis det er f�ソスrste post er Tidf�ソスr = Tid, ellers er Tidf�ソスr v�ソスrdien af Tid fra
forrige post.
Eks
MaskinID ProgramID Tid Tidf�ソスr Diff. (er denne diff
over 0:05:00 skal der bare 0:00:00
25 1254 12:03:05 12:03:05 0:00:00
25 1254 12:03:07 12:03:05 0:00:02
25 1254 12:03:07 12:03:07 0:00:00
25 1254 12:03:09 12:03:07 0:00:02
samlet tid:
0:00:04
H�ソスber dette giver mening.
Per
"Benny Andersen" <a.mai...@gmail.com> skrev i en meddelelse
news:d27d640b-d1eb-4cf8...@e23g2000yqd.googlegroups.com...
On 16 Nov., 22:20, "Per" <lauesga...@adr.dk> wrote:
> Dato MaskinID ProgramID Tid (sum Tid - stop)
> Antal(l�ソスbenr2) kode0 kode1 ...kode31
Der behøver ikke være et ekstra tidsfelt, du har jo netop fastlagt det
som 2 følgende poster. Det skal dermed fremgå af felterne hvad der er
efter hinanden følgende poster - det gør det måske med feltet løbenr:
Hvis vi antager at løbenr er en fortløbende heltalstaller (lige som
autonummerering) så kan tidsdifferencen til en posters efterfølgere
findes sådan:
select E.tid-P.tid as diftid from tabel as P, tabel as E where
E.løbenr=P.løbeNr+1
http://www.sqldatabasetutorial.com/sqltutorial/sqlselfjoin.aspx
Nu er jeg ved at v�re p� h�jkant igen.
Det ser umiddelbart ud til at v�re noget der m�ske kan bruges.
Det vil jeg fors�ge mig med.
Tusind tak for det.
Per
"Benny Andersen" <a.mai...@gmail.com> skrev i en meddelelse
news:ff6b445e-6bc8-44d3...@o10g2000yqa.googlegroups.com...
On 17 Nov., 18:56, "Per" <lauesga...@adr.dk> wrote:
> H�ber dette giver mening.
Anvendelsen og meningen med opsumeringen forst�r jeg ikke helt, men
nok den differens mellem poster.
Der beh�ver ikke v�re et ekstra tidsfelt, du har jo netop fastlagt det
som 2 f�lgende poster. Det skal dermed fremg� af felterne hvad der er
efter hinanden f�lgende poster - det g�r det m�ske med feltet l�benr:
Hvis vi antager at l�benr er en fortl�bende heltalstaller (lige som
autonummerering) s� kan tidsdifferencen til en posters efterf�lgere
findes s�dan:
select E.tid-P.tid as diftid from tabel as P, tabel as E where
E.l�benr=P.l�beNr+1
http://www.sqldatabasetutorial.com/sqltutorial/sqlselfjoin.aspx