Avatar billede jensen363 Forsker
23. november 2011 - 13:50 Der er 20 kommentarer og
1 løsning

Identificér indhold af kolonne

Min datasæt består af 600.000 rækker fra en eventlog.

En række består en unik ID, en dato og indtil 20 events hvor en ID kan skifte status på en eventdato :

En ID kan godt have flere events

Event ID er kolonneoverskrift for de 20 events, og indhold er en data for hvornår eventen indtraf.

Jeg skal nu have et ekstra felt i tabellen, hvor dato for den seneste event står, samt hvilken event det er tale om ???

Hvordan gøres dette ???
Avatar billede Slettet bruger
23. november 2011 - 14:31 #1
hej jensen!~)

..er det en access backend?
Avatar billede jensen363 Forsker
23. november 2011 - 14:33 #2
Ind til videre kun en backend :-)
Avatar billede Slettet bruger
23. november 2011 - 14:45 #3
kan du ikke lige forklare din tabel struktur igen.... er der kun 1 tabel?~)
Avatar billede jensen363 Forsker
23. november 2011 - 14:57 #4
Der er kun een tabel.

Tabellen består af følgende :

4 felter som identificerer ID ( Log Date, JLTO, JLJOB , JLKEY )
3 felter som skal opdateres ( # Log, Latest Log, Change Date )
19 felter som er event som afhængig om event er indtruffet indeholder en dato eller er blank

Event er identifideret som en statusændring, eksempel :
1 > 3
1 > 4
1 > B ....

Feltet # Log skal opdateres med antal events for record
Feltet Change Date skal opdateres med dato for seneste event
Feltet Latest Log skal opdateres med hvilken ehent der er den seneste

Jeg kan godt sende et eksempel hvis det bliver nødvendigt
Avatar billede Slettet bruger
23. november 2011 - 15:27 #5
ja tak!~)
Avatar billede Slettet bruger
23. november 2011 - 15:27 #6
spg.eksperten@gmail.com
Avatar billede jensen363 Forsker
23. november 2011 - 15:57 #7
Eksempel sendt :-)
Avatar billede Slettet bruger
23. november 2011 - 16:10 #8
ikke modtaget!~(
Avatar billede jensen363 Forsker
23. november 2011 - 16:17 #9
Sendt een gang til ....
Avatar billede Slettet bruger
23. november 2011 - 16:24 #10
stadig ikke modtaget og den er heller ikke i spam... har du zippet den?
Avatar billede jensen363 Forsker
23. november 2011 - 16:25 #11
Den er zippet !!!
Avatar billede jensen363 Forsker
23. november 2011 - 16:26 #12
Den er på 0.600 Mb
Avatar billede Slettet bruger
23. november 2011 - 16:28 #13
jeg har modtaget den paa en anden pc, saa jeg sidder aabenbart bag en firewall, som goer et eller andet?

...men jeg har filen nu, saa jeg kigger paa det senere idag, hvis det ikke er loest inden!~)
Avatar billede jensen363 Forsker
23. november 2011 - 16:32 #14
Den er ikke løst endnu :-(
Avatar billede Slettet bruger
24. november 2011 - 09:38 #15
Hej smid dette ind i et modul:

Public Function Maximum(ParamArray MyArray()) As Variant

Dim intLoop As Long
Dim intColumn As Long

Maximum = Null
intColumn = 0
For intLoop = LBound(MyArray) To UBound(MyArray)

If IsNull(MyArray(intLoop)) Then
'do nothing
ElseIf IsNull(Maximum) Then
Maximum = MyArray(intLoop)
intColumn = intLoop + 1
ElseIf MyArray(intLoop) > Maximum Then
Maximum = MyArray(intLoop)
intColumn = intLoop + 1
End If

Next
End Function

Public Function Column(ParamArray MyArray()) As Variant

Dim intLoop As Long
Dim intColumn As Long

Column = Null
intColumn = 0
For intLoop = LBound(MyArray) To UBound(MyArray)

If IsNull(MyArray(intLoop)) Then
'do nothing
ElseIf IsNull(Column) Then
Column = MyArray(intLoop)
intColumn = intLoop + 1
ElseIf MyArray(intLoop) > Column Then
Column = MyArray(intLoop)
intColumn = intLoop + 1
End If

Next
Select Case intColumn
Case 1
Column = "1 > 3"
Case 2
Column = "1 > 4"
Case 3
Column = "1 > 5"
Case 4
Column = "1 > B"
Case 5
Column = "3 > B"
Case 6
Column = "4 > 1"
Case 7
Column = "4 > 3"
Case 8
Column = "4 > 5"
Case 9
Column = "4 > B"
Case 10
Column = "4 > D"
Case 11
Column = "5 > 1"
Case 12
Column = "5 > 3"
Case 13
Column = "5 > 4"
Case 14
Column = "5 > B"
Case 15
Column = "5 > D"
Case 16
Column = "W > 1"
Case 17
Column = "W > 3"
Case 18
Column = "W > 4"
Case 19
Column = "W > 5"
End Select
End Function


Public Function Number(ParamArray MyArray()) As Variant

Dim intLoop As Long
Dim intNumber As Long

Number = Null
intNumber = 0
For intLoop = LBound(MyArray) To UBound(MyArray)

If IsNull(MyArray(intLoop)) Then
'do nothing
ElseIf IsNull(Number) Then
Number = MyArray(intLoop)
intNumber = intNumber + 1
ElseIf MyArray(intLoop) > Number Then
Number = MyArray(intLoop)
intNumber = intNumber + 1
End If

Next
Number = intNumber
End Function


....Jeg har ikke optimeret paa det.... men det er sikkert fint.

Lav en forespoergsel:

SELECT tblOption.JLKEY, Maximum([1 > 3],[1 > 4],[1 > 5],[1 > B],[3 > B],[4 > 1],[4 > 3],[4 > 5],[4 > B],[4 > D],[5 > 1],[5 > 3],[5 > 4],[5 > B],[5 > D],[W > 1],[W > 3],[W > 4],[W > 4]) AS MaxDate, Column([1 > 3],[1 > 4],[1 > 5],[1 > B],[3 > B],[4 > 1],[4 > 3],[4 > 5],[4 > B],[4 > D],[5 > 1],[5 > 3],[5 > 4],[5 > B],[5 > D],[W > 1],[W > 3],[W > 4],[W > 4]) AS MaxColumn, Number([1 > 3],[1 > 4],[1 > 5],[1 > B],[3 > B],[4 > 1],[4 > 3],[4 > 5],[4 > B],[4 > D],[5 > 1],[5 > 3],[5 > 4],[5 > B],[5 > D],[W > 1],[W > 3],[W > 4],[W > 4]) AS EventNumber
FROM tblOption;


Saa kan du tage den derfra!~)
Avatar billede jensen363 Forsker
24. november 2011 - 10:22 #16
Der er 2 events på følgende :

JLKEY = 2014755, 2018586, 2021611

men den returnerer kun 1 ( AS EventNumber )
Avatar billede jensen363 Forsker
24. november 2011 - 10:49 #17
Umiddelbart ser det ud til, at det er kombinationen af de 2 events der fejler !!!

Altså : [1 > B] og [4 > 5]

I hele datasættet optræder denne omkring 500 gange, og returnerer for alle [# Log] = 1.
Avatar billede Slettet bruger
24. november 2011 - 11:58 #18
..jeg tager lige et kig senere idag...
Avatar billede jensen363 Forsker
24. november 2011 - 12:04 #19
Det er i orden ...

Det er et mindre problem, omend mystisk :-)
Avatar billede Slettet bruger
24. november 2011 - 18:17 #20
Option Compare Database
Option Explicit

Public Function Maximum(ParamArray MyArray()) As Variant

Dim intLoop As Long
Dim intColumn As Long

Maximum = Null
For intLoop = LBound(MyArray) To UBound(MyArray)

If IsNull(MyArray(intLoop)) Then
'do nothing
ElseIf IsNull(Maximum) Then
Maximum = MyArray(intLoop)
ElseIf MyArray(intLoop) > Maximum Then
Maximum = MyArray(intLoop)
End If

Next
End Function

Public Function Column(ParamArray MyArray()) As Variant

Dim intLoop As Long
Dim intColumn As Long

Column = Null
intColumn = 0
For intLoop = LBound(MyArray) To UBound(MyArray)

If IsNull(MyArray(intLoop)) Then
'do nothing
ElseIf IsNull(Column) Then
Column = MyArray(intLoop)
intColumn = intLoop + 1
ElseIf MyArray(intLoop) > Column Then
Column = MyArray(intLoop)
intColumn = intLoop + 1
End If

Next
Select Case intColumn
Case 1
Column = "1 > 3"
Case 2
Column = "1 > 4"
Case 3
Column = "1 > 5"
Case 4
Column = "1 > B"
Case 5
Column = "3 > B"
Case 6
Column = "4 > 1"
Case 7
Column = "4 > 3"
Case 8
Column = "4 > 5"
Case 9
Column = "4 > B"
Case 10
Column = "4 > D"
Case 11
Column = "5 > 1"
Case 12
Column = "5 > 3"
Case 13
Column = "5 > 4"
Case 14
Column = "5 > B"
Case 15
Column = "5 > D"
Case 16
Column = "W > 1"
Case 17
Column = "W > 3"
Case 18
Column = "W > 4"
Case 19
Column = "W > 5"
End Select
End Function


Public Function Number(ParamArray MyArray()) As Variant

Dim Number2 As Variant
Dim intLoop As Long
Dim intNumber As Long

Number = Null
Number2 = Null
intNumber = 0
For intLoop = LBound(MyArray) To UBound(MyArray)

If IsNull(MyArray(intLoop)) Then
'do nothing
ElseIf IsNull(Number2) Then
Number2 = MyArray(intLoop)
intNumber = intNumber + 1
ElseIf MyArray(intLoop) > Number2 Then
Number = MyArray(intLoop)
intNumber = intNumber + 1
Else
intNumber = intNumber + 1
End If

Next
Number = intNumber
End Function
Avatar billede jensen363 Forsker
25. november 2011 - 15:08 #21
Så var den der vist :-)

Takker og god weekend !!!!
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