Newsgroup: it.comp.appl.access
Titolo: ordinare dati

buongiorno,
 
sto cercando di ordinare alcuni dati che si presentano nella seguente forma:
 
Arrivo	A	B	C	D	E
01/03/2016 00:00	0	0	0	0	0
01/03/2016 01:00	0	0	0	0	0
01/03/2016 02:00	0	0	0	0	0
01/03/2016 03:00	0	0	0	0	0
01/03/2016 04:00	0	0	0	0	0
01/03/2016 05:00	0	0	0	0	0
01/03/2016 06:00	0	0	0	0	0
01/03/2016 07:00	0	0	0	0	0
01/03/2016 08:00	0	0	0	0	0
01/03/2016 09:00	0	0	0	46,0213832	0
01/03/2016 10:00	0	0	0	46,0213832	0
01/03/2016 11:00	0	0	0	46,0213832	0
01/03/2016 12:00	0	0	0	46,0213832	0
01/03/2016 13:00	0	0	0	46,0213832	0
01/03/2016 14:00	0	0	0	46,0213832	0
01/03/2016 15:00	0	0	0	46,0213832	0
01/03/2016 16:00	0	0	0	46,0213832	0
01/03/2016 17:00	0	0	0	46,0213832	0
01/03/2016 18:00	0	0	0	46,0213832	0
01/03/2016 19:00	0	0	0	46,0213832	0
01/03/2016 20:00	0	0	0	0	0
01/03/2016 21:00	0	0	0	0	0
01/03/2016 22:00	0	0	0	0	0
01/03/2016 23:00	0	0	0	0	0
02/03/2016 00:00	0	0	0	0	0
02/03/2016 01:00	0	0	0	0	0
02/03/2016 02:00	0	0	0	0	0
02/03/2016 03:00	0	0	0	0	0
02/03/2016 04:00	0	0	0	0	0
02/03/2016 05:00	0	0	0	0	0
 
 
vorrei ottenere il seguente risultato:
 
Arrivo	partenza	A	B	C	D	E
01/03/2016 00:00	01/03/2016 08:00	0	0	0	0	0
01/03/2016 09:00	01/03/2016 19:00	0	0	0	46,0213832	0
01/03/2016 20:00	02/03/2016 05:00		0	0	0	0	0
 
l'aggregazione segue il seguente criterio: prendo come data di arrivo la 
prima data del record e come data di partenza l'ultima data prima che 
cambi qualche valore nel record.
ho scritto il seguente codice che sembra funzionare ma, mi ripete il 
primo record due volte e non mi scrive la data in partenza
 
Sub aggregazione()
 
Dim DBCorrente As DAO.Database
Dim source As DAO.Recordset
Dim target As DAO.Recordset
 
Set DBCorrente = CurrentDb
 
Set source = DBCorrente.OpenRecordset("QueryNOx", dbOpenDynaset)
Set target = DBCorrente.OpenRecordset("tabNOx", dbOpenDynaset)
 
CurrentDb.Execute "delete * from tabnox"
 
Do Until source.EOF
 
s_arrivo = source!arrivo
s_A = source!A
s_b = source!b
s_c = source!c
s_d = source!d
s_e = source!e
 
target.AddNew
target!arrivo = s_arrivo
 
source.MoveNext
 
If s_A = source!A And s_b = source!b And s_c = source!c And s_d = 
source!d And s_e = source!e Then
 
target!partenza = source!arrivo
 
Else
 
target!A = s_A
target!b = s_b
target!c = s_c
target!d = s_d
target!e = s_e
target.Update
source.MoveNext
 
End If
 
source.MoveNext
 
Loop
 
End Sub
 
come posso modificarla per ottenere cio che voglio?
grazie per l'aiuto
 
---
Questa e-mail è stata controllata per individuare virus con Avast antivirus.
https://www.avast.com/antivirus
 
 

Parliamo di Emissioni di Nox in un sistema di monitoraggio...? (deformazione)...
 
Non sono stato a vedere nel dettaglio l'errore... ATTENZIONE alla dichiarazione OBBLIGATORIA delle VARIABILI che non fai...!!!!!!!!!!
 
Option Compare Database
Option Explicit
 
Function Test()
    Dim rsSource    As DAO.Recordset
    Dim rsTarget    As DAO.Recordset
 
    Dim sDt         As Date
    Dim dA          As Double
    Dim dB          As Double
    Dim dC          As Double
    Dim dD          As Double
    Dim dE          As Double
 
    Set rsSource = DBEngine(0)(0).OpenRecordset("SELECT * FROM Source Order By Arrivo")
    Set rsTarget = DBEngine(0)(0).OpenRecordset("Target")
 
    sDt = rsSource!Arrivo
    dA = rsSource!A
    dB = rsSource!B
    dC = rsSource!C
    dD = rsSource!D
    dE = rsSource!E
 
    Do Until rsSource.EOF
        If dA <> rsSource!A Or dB <> rsSource!B Or dC <> rsSource!C Or dE <> rsSource!E Or dD <> rsSource!D Then
            rsSource.MovePrevious
            rsTarget.AddNew
            rsTarget!Arrivo = sDt
            rsTarget!partenza = rsSource!Arrivo
            rsTarget!A = dA
            rsTarget!B = dB
            rsTarget!C = dC
            rsTarget!D = dD
            rsTarget!E = dE
            rsTarget.Update
 
            rsSource.MoveNext
            sDt = rsSource!Arrivo
            dA = rsSource!A
            dB = rsSource!B
            dC = rsSource!C
            dD = rsSource!D
            dE = rsSource!E
        End If
        rsSource.MoveNext
    Loop
    rsSource.MovePrevious
    rsTarget.AddNew
    rsTarget!Arrivo = sDt
    rsTarget!partenza = rsSource!Arrivo
    rsTarget!A = dA
    rsTarget!B = dB
    rsTarget!C = dC
    rsTarget!D = dD
    rsTarget!E = dE
    rsTarget.Update
End Function
 
 
@Alex

Ovviamente ho omesso il controlle Errori, la verifica iniziale di EOF sul Source, e la distruzione degli Oggetti alla fine...
 
Il codice è sicuramente migliorabile... ma quello funziona a sufficienza per l'esito finale...
 
@Alex
 


ho provato a dare una indicazione ma l'ho cancellata perchè non è sufficientemente chiaro per me il significato delle colonne A->E e se ci possono essere combinazioni di valori differenti da quelli riportati
 
Comunque 
se il risultato dipende, come sembra, dall'esame della successione dei valori delle colonne A->E 
se il valore di primo riferimento è quello della colonna D
se ci possono essere altri valori oltre agli zeri
 
puoi anche aggiungere un altro campo (o utilizzare uno di quelli SEMPRE a zero)
per inserirci, scorrendo il recordset, un valore numerico "di riga uguale alla precedente" (per le colonne A->E) 
da aumentare di uno quando in queste colonne appare un nuovo valore 
 
si determinano così i "blocchi di righe" (nel caso sono appunto 3)
 
e il risultato cercato si ottiene anche con una query di raggruppamento sul numero inserito da codice (che se necessario puoi nascondere) 
SE Access riesce a stabilire MIN e MAX con il tipo di dato della colonna Arrivo
(diventano appunto due colonne nella query di raggruppamento)

 Parliamo di Emissioni di Nox in un sistema di monitoraggio...? (deformazione)...
 
si esatto, sono dati di emissione in atmosfera

grazie! la provo immediatamente.



le colonne da A a E sono i nomi delle diverse misure effettuate, quando 
non variano possono essere aggregate indicando la data di arrivo e la 
data di partenza



il codice che mi hai fornito è perfetto per i miei scopi! Ti ringrazio 
tantissimo :D


 tantissimo :D
 
Soggetto a 14181...?
 
Bene, saluti
@Alex

No, sono prove sperimentali