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 ???
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
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!~)
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!~)