Newsgroup: it.comp.lang.visual-basic
Titolo: DUPLICATI AIUTOOO!!

io ho una serie di dati da cui devo eliminare dei duplicati
i dati si compongono in questa maniera
valore 1 , valore 2, valore 3, data
i duplicati sono quelli che hanno i valori da 1 a tre uguali anche se la
data è diversa
es.:
valori dupplicati da togliere
valore 1 | valore 2 | valore 3 | data
xxx        | yyy        | zzz         | 1-1-2002
xxx        |yyy         | zzz         | 2-1-2002
xxx        |yyy         | zzz         | 3-1-2002
xxx        |yyy         | zzz         | 4-1-2002
xxx        |yyy         | zzz         | 5-1-2002
aaa        |bbb        | ccc        | 1-1-2002
aaa        |bbb        | ccc        | 2-1-2002
aaa        |bbb        | ccc        | 3-1-2002
aaa        |bbb        | ccc        | 4-1-2002
devono risultarmi solo due combinazioni di valori ovvero
xxx        | yyy        | zzz         | 1-1-2002
aaa        |bbb        | ccc        | 1-1-2002
come posso fare?

 la data č diversa
E come data quale vuoi?
Supponiamo la piů recente:
Select valore1, valore2, valore3,
max(data) as Data
from tabella
group by valore1,valore2,valore3
Ciao
Alberto

 ha scritto nel messaggio
news:sG64a.127611$ZE.36...@twister2.libero.it...


 facendo cosi non riesco a estrarre il valore della data perchè?
Allora servono maggiori dettagli.
1) Che db usi
2) Che errore ti dà
3) Posta il codice in cui hai l'errore.
Ciao
Alberto

questo è il codice
Public Function DbByAnalyze(SceltaLav As String)
    Dim dI As Date
    Dim dF As Date
    Dim I As Integer
    Dim lRC As Long
    Dim s As String
    Dim rsData As New ADODB.Recordset
    Dim iAr As Integer
    Dim Y As Integer
    Dim blnNew As Boolean
    Dim blnFound As Boolean
    frmDisplay.picGreenOn.Visible = True
    frmDisplay.picRedOn.Visible = False
    frmDisplay.ledAvanzamento.SetLevel 1
    dI = DateSerial(frmDisplay.lstAaaa.Text, _
        frmDisplay.lstMm.Text, frmDisplay.lstGg.Text)
    dF = DateSerial(frmDisplay.lstAaaa.Text, _
        frmDisplay.lstMm.Text, frmDisplay.lstGg.Text)
    If SceltaLav = "A" Then
        dI = dI + TimeSerial(frmDisplay.lstHhArr, frmDisplay.lstMmArr, 0)
        dF = dF + TimeSerial(frmDisplay.lstHhPar, frmDisplay.lstMmPar, 0)
    Else
        dF = DateAdd("d", 1, dF)
        dI = dI + TimeSerial(frmDisplay.lstHhPar, frmDisplay.lstMmPar, 0)
        dF = dF + TimeSerial(frmDisplay.lstHhArr, frmDisplay.lstMmArr, 0)
    End If
    Call DBOpen
  s = "SELECT PLA_STAZIONE , PLA_BC_SEDE_MITT, PLA_BC_NUM_IDE,
PLA_BC_PROGR_COLLI, " & _
        "PLA_BC_TIPO_COLLO, PLA_BC_SEDE_DEST, PLA_TIPO_LAV, PLA_ECCEDENZA,
PLA_SEDE, " & _
        "PLA_PALMARE , PLA_CAROSELLO, PLA_VOLUME, PLA_TIMESTAMP_RALLA1, " &
_
        "PLA_TIMESTAMP_BCODE2, MAX(PLA_TIMESTAMP_BCODE1) as Data FROM " & _
        "COL_LAV WHERE PLA_TIPO_LAV = '" & SceltaLav & "' AND " & _
        "PLA_TIMESTAMP_BCODE1 BETWEEN #" & dI & "# AND #" & dF & "# " & _
        "GROUP BY PLA_STAZIONE , PLA_BC_SEDE_MITT, PLA_BC_NUM_IDE,
PLA_BC_PROGR_COLLI, " & _
        "PLA_BC_TIPO_COLLO, PLA_BC_SEDE_DEST, PLA_TIPO_LAV, PLA_ECCEDENZA,
PLA_SEDE, " & _
        "PLA_PALMARE , PLA_CAROSELLO, PLA_VOLUME, PLA_TIMESTAMP_RALLA1, " &
_
        "PLA_TIMESTAMP_BCODE2"
'        s = "SELECT * FROM COL_LAV WHERE PLA_TIPO_LAV = '" & SceltaLav & "'
AND " & _
'        "PLA_TIMESTAMP_BCODE1 BETWEEN #" & dI & "# AND #" & dF & "# " & _
'        "ORDER BY PLA_TIMESTAMP_BCODE1"
'    s = "UPDATE COL_LAV SET PLA_DUPLICATO = 1 WHERE PLA_TIPO_LAV <> 1"
    Call rsData.Open(s, _
    conDbImport, adOpenDynamic, adLockOptimistic, adCmdTableDirect)
    I = 0
    iArRow = 0
    If Not (rsData.EOF And rsData.BOF = True) Then
        rsData.MoveFirst
        'CICOLO DI SCANSIONE RECORDSET
        While Not (rsData.EOF)
            I = I + 1
            blnNew = False
            blnFound = False
            DoEvents
            'VERIFICA DIMENSIONAMENTO ARRAY
            If iArRow = 0 Then
                blnNew = True
            Else
                Y = 0
                'CICOLO DI SCANSIONE ARRAY
                While Y <= (iArRow - 1) And Not (blnFound)
                    DoEvents
                    If tystData(Y).Stazione = _
                        rsData.Fields(DB_FLD_PLA_STAZIONE).Value And _
                        tystData(Y).Sede = _
                        rsData.Fields(DB_FLD_PLA_SEDE).Value And _
                        tystData(Y).Punto = _
                        rsData.Fields(DB_FLD_PLA_BC_SEDE_DEST).Value Then
                        'RIGHA DELL'ARRAY TROVATA
                        blnFound = True
                        iAr = Y
                    End If
                    Y = Y + 1
                Wend
                If Not (blnFound) Then blnNew = True
            End If
            'SE I DATI DI RAGGRUPPAMENTO NON SONO NELL'ARRAY
            If blnNew Then
                iArRow = iArRow + 1
                ReDim Preserve tystData(iArRow - 1) As tyStat
                iAr = iArRow - 1
                tystData(iArRow - 1).Stazione = " "
            End If
            'AGGIUNTA DATI NELL'ARRAY
            With tystData(iAr)
                If .Stazione = " " Then
                    .Stazione = rsData.Fields(DB_FLD_PLA_STAZIONE).Value
                    .Sede = rsData.Fields(DB_FLD_PLA_SEDE).Value
                    .Punto = rsData.Fields(DB_FLD_PLA_BC_SEDE_DEST).Value
                End If
                .TColli = .TColli + 1
                Select Case rsData.Fields(DB_FLD_PLA_CAROSELLO).Value
                    Case 0
                        If rsData.Fields(DB_FLD_PLA_ECCEDENZA).Value = True
Then
                            .Ecced = .Ecced + 1
                        Else
                            .NonLetti = .NonLetti + 1
                        End If
                    Case 1
                        .TC1 = .TC1 + 1
                    Case 2
                        .TC2 = .TC2 + 1
                    Case 3
                        .TC3 = .TC3 + 1
                End Select
                .Volume = .Volume + rsData.Fields(DB_FLD_PLA_VOLUME).Value
                If .DataPrimo = 0 Then
                    .DataPrimo =
rsData.Fields(DB_FLD_PLA_TIMESTAMP_BCODE1).Value
                End If
                .DataUltimo =
rsData.Fields(DB_FLD_PLA_TIMESTAMP_BCODE1).Value
            End With
            rsData.MoveNext
        Wend
        frmDisplay.ledAvanzamento.SetLevel 50
        If iArRow > 0 Then
            'MATRICE DA ESPORTARE IN EXCEL
            CreaXlStatTrib
        End If
    Else
        'NESSUN RECORD TROVATo
        MsgBox "Non ci sono risultati", vbOKOnly, "Errore"
        frmDisplay.lblAnteprima.Visible = False
        frmDisplay.lblGenera.Visible = True
        frmDisplay.picGreenOn.Visible = False
        frmDisplay.picRedOn.Visible = True
        frmDisplay.ledAvanzamento.SetLevel 0
    End If
    DBClose
End Function
come vedi creo una matrice che contiene i valori.
questi campi se sono uguali generano un duplicato indipendentemente dagli
altri campi
PLA_BC_SEDE_MITT
PLA_BC_NUM_IDE
PLA_BC_PROGR_COLLI
PLA_BC_TIPO_COLLO
PLA_BC_SEDE_DEST
il codice che ho scritto è corretto soltanto che nei conteggi non mi esclude
le date
PLA_TIMESTAMP_BCODE1
e continua a calcolarmela come se fosse un dato non duplicato
ovvero se ho tre duplicati io ho bisogno di una unica data (la più recente)
e il conteggio di campi come PLA_CAROSELLO che si incrementa senza tenere
conto delle date dei dati duplicati.

     Dim dF As Date
 >
I progetti vanno inviati al sito comune!
	maxx
-- 
NOSPAM: Rimuovere i trattini dallo username!
Cut hyphens from my username!

 & _ "PLA_TIMESTAMP_BCODE1 BETWEEN #" & dI & "# AND #" & dF & "# " & _
Sinceramente non ho capito cosa faccia il tuo codice (se individui un punto
da verificare, bene, altrimenti č un po' troppo lungo da capire in un
post...).
Perň la riga che riporto qui sopra contiene un piccolo errore:
Devi forzare la formattazione delle date, altrimenti ti esponi alle
impostazioni internazionali.
Usa Format$(dI,"mm/dd/yyyy") all'interno della concatenazione.
Ciao
Alberto

alla fine il problema sta nella query sql,
quando faccio la select:
s = "SELECT PLA_STAZIONE , PLA_BC_SEDE_MITT, PLA_BC_NUM_IDE,
PLA_BC_PROGR_COLLI, " & _
'        "PLA_BC_TIPO_COLLO, PLA_BC_SEDE_DEST, PLA_TIPO_LAV, PLA_ECCEDENZA,
PLA_SEDE, " & _
'        "PLA_PALMARE , PLA_CAROSELLO, PLA_VOLUME, PLA_TIMESTAMP_RALLA1, " &
_
'        "PLA_TIMESTAMP_BCODE2, MAX(PLA_TIMESTAMP_BCODE1) as Data FROM " & _
'        "COL_LAV WHERE PLA_TIPO_LAV = '" & SceltaLav & "' AND " & _
'        "PLA_TIMESTAMP_BCODE1 BETWEEN #" & dI & "# AND #" & dF & "# " & _
'        "GROUP BY PLA_STAZIONE , PLA_BC_SEDE_MITT, PLA_BC_NUM_IDE,
PLA_BC_PROGR_COLLI, " & _
'        "PLA_BC_TIPO_COLLO, PLA_BC_SEDE_DEST, PLA_TIPO_LAV, PLA_ECCEDENZA,
PLA_SEDE, " & _
'        "PLA_PALMARE , PLA_CAROSELLO, PLA_VOLUME, PLA_TIMESTAMP_RALLA1, " &
_
'        "PLA_TIMESTAMP_BCODE2"
non mi restituisce il valore PLA_TIMESTAMP_BCODE1


Beh, io nell'elenco dei campi da estrarre non lo vedo...
Alberto.

 Beh, io nell'elenco dei campi da estrarre non lo vedo...
A meno che (ma voglio sperare che non sia così...), tu non creda di estrarre
un campo che hai rinominato come 'Data' attraverso la proprietà:
rsData.Fields(DB_FLD_PLA_TIMESTAMP_BCODE1).Value
Se così è, considera che:
1) nella query, il max(campo) è stato rinominato come 'Data'
2) per evitare queste sgradevoli cose, abituati alla sintassi (a volte più
lunga, se vogliamo, ma molto più esplicita):
rsData.Fields.Item("Data").Value
Ciao e sappimi dire
Alberto

 ha scritto nel messaggio
news:py74a.127555$YG2.3...@twister1.libero.it...
