Ciao,
premesso che non sono proprio un "mostro" nelle query complicate, credo che puoi risolvere così:
innanzitutto come fai a sapere che IDPRELIEVO = 23563 (NEGATIVO) è riferito a IDPRELIEVO = 25963(POSITIVO) senza avere un nome del prelievo (o un suo identificativo univoco)?
Per capirci:
codice:
IDPRELIEVO DATAPRELIEVO STATOPRELIEVO NOMEPRELIEVO
23563 2010-06-11 NEGATIVO LAGODICOMO
23564 2010-06-12 NEGATIVO LAGODILECCO
25963 2010-07-18 POSITIVO LAGODICOMO
25969 2010-07-19 POSITIVO LAGODILECCO
Per trovare poi le variazioni da NEGATIVO a POSITIVO farei una query del genere:
codice:
SQL = " SELECT * FROM nome_tabella ORDER BY NOMEPRELIEVO ASC, IDPRELIEVO DESC "
Set RS = Conn.Execute(SQL)
in questo modo avrai un ordinamento del genere:
codice:
IDPRELIEVO DATAPRELIEVO STATOPRELIEVO NOMEPRELIEVO
25963 2010-07-18 POSITIVO LAGODICOMO
23563 2010-06-11 NEGATIVO LAGODICOMO
25969 2010-07-19 POSITIVO LAGODILECCO
23564 2010-06-12 NEGATIVO LAGODILECCO
e in un ciclo "Do While..." controlli record per record la variazione:
codice:
Do While Not RS.Eof
' verifico se il record precedente ha lo stesso NOMEPRELIEVO del record attuale
If VarNOMEPRELIEVO = RS("NOMEPRELIEVO") Then
' verifico se il record precedente è POSITIVO ed il record attuale è NEGATIVO
If VarSTATOPRELIEVO = "POSITIVO" AND RS("STATOPRELIEVO") = "NEGATIVO" Then
' stampo a video i valori
Response.Write("Variazione da NEGATIVO a POSITIVO per NOMEPRELIEVO: "& VarNOMEPRELIEVO &", DATAPRELIEVO NEGATIVO: "& RS("DATAPRELIEVO") &", DATAPRELIEVO POSITIVO: "& VarDATAPRELIEVO &"
")
' svuoto le variabili, esco dai due If e recupero il prossimo record
VarIDPRELIEVO = ""
VarDATAPRELIEVO = ""
VarSTATOPRELIEVO = ""
VarNOMEPRELIEVO = ""
End If ' If VarSTATOPRELIEVO = "POSITIVO" AND RS("STATOPRELIEVO") = "NEGATIVO" Then
Else
' il record precedente NON ha lo stesso NOMEPRELIEVO del record attuale
' quindi recupero i valori dei nuovi campi solo se STATOPRELIEVO è POSITIVO nel record attuale
If RS("STATOPRELIEVO") = "POSITIVO" Then
VarIDPRELIEVO = RS("IDPRELIEVO")
VarDATAPRELIEVO = RS("DATAPRELIEVO")
VarSTATOPRELIEVO = RS("STATOPRELIEVO")
VarNOMEPRELIEVO = RS("NOMEPRELIEVO")
Else ' se nel record attuale STATOPRELIEVO NON è POSITIVO svuoto le variabili dai valori del precedente record
VarIDPRELIEVO = ""
VarDATAPRELIEVO = ""
VarSTATOPRELIEVO = ""
VarNOMEPRELIEVO = ""
End If ' If RS("STATOPRELIEVO") = "POSITIVO" Then
End If ' If VarNOMEPRELIEVO = RS("NOMEPRELIEVO") Then
RS.MoveNext
Loop
con qualche ritocchino dovrebbe funzionare.
fulvio