Avatar billede nih Novice
17. november 2004 - 14:14 Der er 16 kommentarer og
1 løsning

svær forespørgsel

hej Eksperter

Her er en hjernevrider

Jeg har en tabel fra en motor logger med følgende felter:
dato (date)
tid  (date)
aktiv (integer - '0' eller '1')

der er ca. 1500 poster
dato    tid    aktiv
1/11    07:00    1
1/11    04:45    0
1/11    04:22    1
1/11    03:05    0
1/11    01:00    1
31/10  02:00    0
22/10  01:01    1
osv....

Jeg vil gerne have en forespørgsel der viser for hver time hvor mange % af tiden der står '1' i [aktiv]

Niels
Avatar billede nih Novice
17. november 2004 - 14:15 #1
Hvis det er nemmere i Excel eller et andet smart program er det også et acceptabelt svar.
Avatar billede supertekst Ekspert
17. november 2004 - 14:40 #2
Det ville være en god ide, at illustrere, hvad du gerne vil have på basis af den viste "log"

MVH
Avatar billede nih Novice
17. november 2004 - 15:11 #3
dato  time  %aktiv
1/11  06      0 %
1/11  05      0 %
1/11  04      38 %  (23 min)
1/11  03      8 %  (5 min)
1/11  02    100 %  (60 min)
1/11  01      0 %  (60 min)
Avatar billede nih Novice
17. november 2004 - 15:15 #4
loggeren har 'følt' at motoren:
startede d. 22/10 kl 01:01
slukkede d. 31/10 kl 02:00
startede d. 1/11 kl 01:00
slukkede d. 1/11 kl 03:05
osv.

Niels
Avatar billede hossein Nybegynder
17. november 2004 - 17:08 #5
dette er efter din 1. formulering :)

procent må rettes til aktiv

SELECT dato, tid, procent, formatnumber(IIf(procent=0,iif(procent=1,0,iif(mid(tid,4,2)=0,100,0)),(((mid(tid,4,2))*100))/60),2) & '%' AS minProcent1
FROM Tabel3
ORDER BY dato desc, tid desc;

dato            tid  procent minProcent1
01-11-2004    07:00    1    0,00%
01-11-2004    04:45    0    0,00%
01-11-2004    04:22    1    36,67%
01-11-2004    03:05    0    0,00%
01-11-2004    01:00    1    0,00%
31-10-2004    02:00    0    100,00%
22-10-2004    01:01    1    1,67%

hvis det er tale om kun en motor.
Avatar billede nih Novice
17. november 2004 - 17:50 #6
-> hossein

udtrækket skal grupperes på time værdier, således at jeg f.eks kan se at 1/11 kl 02:00 kørte motoren hele timen. (100%)
Avatar billede terry Ekspert
17. november 2004 - 19:34 #7
Theoretically a motor could be started on an entirely different day, and could run days on end, so it would also be necessary to calcualte records for these hours two, ikke?
Avatar billede terry Ekspert
17. november 2004 - 19:35 #8
... these hours too...
Avatar billede nih Novice
17. november 2004 - 19:40 #9
jeps terry - your right :)
Avatar billede terry Ekspert
17. november 2004 - 20:23 #10
so it isnt something which can be done with a query, or at least I dont think so. Your going to have to use a temp table I think, with a function to loop through the records you have.
17. november 2004 - 20:29 #11
jeg sad og tænkte det samme, Terry.

Det kan kun løses i VBA og en temp-tabel er påkrævet, da du ellers ikke kan vise posterne for hver time.

Så mit bud er, at man starter med at udfylde en tmp-tabel med alle timeslag og derefter finder ud af hvormange minutter i hver time, som er aktive.
Endelig, i 2. eller 3. gennemløb, beregnes procenterne.
Avatar billede terry Ekspert
17. november 2004 - 20:33 #12
What you could have is a table which conatins a date and time for all hours of the day and also a column for containing your %.

Then the function loops through this table, maybe for a specific period so that the same calculation doesnt get done again.

For each record (date hour) the loops selects all of the records in your log table with the same date time. Then depending on what records are returned we can decide how to do the calculations for that day. There are a number of possibilities and you need to cover them all.
For example, if there are NO records for that period, then it will be necessary to find out what the previous record was. Off then % = 0 On then % = 100

I'm sure you get the idea.







Does the log get deleted at some stage? I was thinking that it would be silly to loop through your
An idea would to have a funtion which gets
Avatar billede terry Ekspert
17. november 2004 - 20:33 #13
forget the last two lines.
Avatar billede terry Ekspert
17. november 2004 - 20:35 #14
So in fact the temp table is actually no longer a temp table.
Avatar billede nih Novice
17. november 2004 - 20:36 #15
loggen er en lille sort box som jeg resetter og sætter fast på en vilkårlig motor. via et interface kan jeg efter et par dage tilslutte den min PC og udtrække en csv fil med de nævnte kolloner.
den logger tiden når den mærker ændringer i motorens viklinger. Derfor de mange skæve tidspunkter.
Avatar billede nih Novice
17. november 2004 - 21:32 #16
nå, nu har jeg lavet den selv

den laver en temptabel med poster for hvert minut - koden er noget hurtigere end hvis jeg skulle regne antal minutter for hver time.

Sub bygResTabel()
    DoCmd.RunSQL "delete * from tbltidspkt"
    Dim rs As ADODB.Recordset, rsRådata As ADODB.Recordset
    Dim i As Long
    Dim d_maks As Date, d_min As Date

    Set rs = New ADODB.Recordset
    Set rsRådata = New ADODB.Recordset

    d_maks = DMax("[dato]+[tid]", "tblRådata")
    'd_min = DMin("[dato]+[tid]", "tblRådata")
    dtemp = DMin("[dato]+[tid]", "tblRådata")
 
   
    rsRådata.Open "Select ([dato] + [tid]) as tidspunkt, aktiv from tblRådata order by [dato] + [tid] ", _
                CurrentProject.Connection, adOpenDynamic, adLockOptimistic

    rs.Open "tbltidspkt", CurrentProject.Connection, adOpenForwardOnly, adLockOptimistic

    Do Until dtemp > d_maks
       
        rs.AddNew
        rs(0) = dtemp
        rs(1) = find(rsRådata, rs(0))
        rs.Update
        dtemp = DateAdd("n", 1, dtemp)
    Loop
    rs.Close
    rsRådata.Close
End Sub
Function find(rs As ADODB.Recordset, tid As Date) As Double
    On Error Resume Next
    rs.find "tidspunkt > #" & Format(tid, "yyyy-mm-dd hh:nn:ss") & "#"
    If rs(1) = 0 Then find = 1
    If rs(1) = 1 Then find = 0
End Function
Avatar billede nih Novice
14. december 2004 - 22:59 #17
lukker
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