Avatar billede stejuu Novice
19. februar 2015 - 12:04 Der er 7 kommentarer og
1 løsning

Avanceret sortering

Har lige brug for lidt assistance.

Jeg har en tabel bl.a. med informationer om hændelse i én kolonne og et tids stempel i en anden.
Hændelsen kan f.eks. 
Åben:    19-02-2015 01:22:45
Luk:    19-02-2015 01:23:55

Det er let nok at lægge hændelserne i hver sin forespørgsel og herefter udregne tiden for åbning. Problemet er at der kan komme flere "åben" hændelser eller "luk" hændelse efter hinanden, og det i de tilfælde er det sidste (højeste) "Åben" hændelse og den første "Luk" hændelse der skal beregnes. I det tilfælde her er det hændelsen 05:31:33 der skal sorteres væk.

Åben                Luk
19-02-15 03:37:42    19-02-15 03:37:57
19-02-15 04:53:55    19-02-15 04:54:14
19-02-15 05:31:33    19-02-15 06:07:00
19-02-15 05:40:23    19-02-15 07:20:38
19-02-15 07:20:34    19-02-15 07:26:21
19-02-15 07:26:03

Nogen der har en god ide?
Avatar billede fdata Forsker
19. februar 2015 - 13:15 #1
Kan du uddybe en smule?
Hvad er det, der gør 05:31:33 speciel?
Avatar billede stejuu Novice
20. februar 2015 - 09:35 #2
Der er tale om registreringer af en række hændelser i noget produktionsudstyr, hvor en åben hændelse i den ideelle verden gerne skulle blive afløst af en luk hændelse. i ovenstående tilfælde passer de første 2 linjer, der er kommet en åben hændelse og derefter en luk hændelse men i linje 3 mangler der en luk hændelse. Ved analyse at tallene er jeg kommet frem til at åben hændelsen 05:40:23 hænger sammen med luk hændelsen 06:07:00, så i eksemplet her er der en åben hændelse for meget.
Avatar billede fdata Forsker
20. februar 2015 - 10:51 #3
Men i så tilfælde ser det jo lidt sort ud ;O(
Så er åben- og lukhændelserne jo helt ude af sync.

Det, du efterlyser er så en løsning, hvor alle poster fra-og-med åben hændelsen 05:31:33 skal korrigeres.
Du skal jo have flyttet alle lukhændelser "een nedad", så du ender op med at 05:31:33 står alene uden nogen tilhørende lukhændelse.

Men hvor mange poster skal rettes? Det ved vi vel reelt ikke, fordi der kan være flere poster, der er ude af sync.
Dit oplæg, som gik på at en hændelse skulle "sorteres væk" ser ud til at være en simplificering af et helt andet (og større) oprydningsarbejde.
Der skal skrives noget kode, der kan løbe alle poster igennem og sammenligne de to kolonner og danne en ny, korrekt tabel, hvor de ufuldstændige poster er udeladt.
Er det korrekt forstået?
Avatar billede fdata Forsker
20. februar 2015 - 11:05 #4
Whoa. Korrektion!
Jeg nærlæser lige din beskrivelse og kan nu se, at åben- og lukhændelserne  ikke ligger i samme post. Det forvirrede mig at du skrev "i ovenstående tilfælde passer de første 2 linjer ...". Der er jo ikke tale om linjer (poster) i en tabel, men bare to udtræk, som du har sat op ud for hinanden.
Jeg ser lige på en lille oprydningsrutine.
Avatar billede fdata Forsker
20. februar 2015 - 11:26 #5
... og hvordan forestiller du dig løsningen:
  - skal vi slette de poster i tabellen, der er overflødige
  - eller skal de bevares - og i så fald: hvordan skal resultatet præsenteres
Avatar billede fdata Forsker
20. februar 2015 - 11:30 #6
OK, hvis posterne må slettes, får du en løsning her.
Forudsætter at din tabel hedder "Hændelser" og kolonnerne "Hændelse" og "Kl".
Husk lige at tage en kopi af tabellen inden du går amok med nedenstående:

'Markerer dubletter (første "Åben" og sidste "Luk"), sletter markerede poster
Sub RydOp()
  Dim GlType As String
  Dim Rst As Recordset
 
  GlType = ""
  Set Rst = CurrentDb.OpenRecordset("Hændelser", dbOpenDynaset)
  With Rst
    Do
      If !Hændelse = "Åben" And GlType = "Åben" Then
        .MovePrevious
        .Edit
        !Kl = #1/1/2001#
        .Update
        .MoveNext
      End If
      If !Hændelse = "Luk" And GlType = "Luk" Then
        .Edit
        !Kl = #1/1/2001#
        .Update
      End If
      GlType = !Hændelse
      .MoveNext
    Loop Until .EOF
    .Close
  End With
  Set Rst = Nothing
 
  DoCmd.SetWarnings False
  DoCmd.RunSQL "DELETE Hændelser.* FROM Hændelser WHERE Kl = #1/1/2001#"
  DoCmd.SetWarnings True
End Sub
Avatar billede stejuu Novice
20. februar 2015 - 13:12 #7
Det er jo simpelthen genialt det her :)

Har ikke nået at kode det endnu, men jeg kan allerede se at det virker, jeg smider straks de 60 point.
Avatar billede fdata Forsker
20. februar 2015 - 16:40 #8
Super. Takker for point ;O)
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

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