Acquista i nostri libri consigliati su Amazon.it
+ Rispondi al messaggio
Pagina 1 di 2 12 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18

Eliminare campi multipli con valore pi piccolo

  1. #1
    h0m3r non  in linea Scolaretto
    Ciao ragazzi,
    volevo chiedervi come posso eliminare da una tabella access record multipli lasciando solamente quei record che hanno il valore pi alto.
    Allego un esempio cos da spiegarmi meglio:
    Polizza	       NumRapporto	Data Inizio	Data Fine     Rate Pagate
    2019010116225	10350288	15/05/2019	15/04/2020	5
    2019010116225	10350288	15/05/2019	15/04/2020	7
    2019010116225	10350288	15/05/2019	15/04/2020	8
    
    Io da questa tabella vorrei eliminare le righe che presentano un valore di "Rate Pagate" < 8.
    La tabella contiene molti dati e non so quale sia il valore Max(RatePagate)

  2. #2
    L'avatar di Max.Riservo
    Max.Riservo non  in linea Scribacchino
    Quote Originariamente inviato da h0m3r Visualizza il messaggio
    Io da questa tabella vorrei eliminare le righe che presentano un valore di "Rate Pagate" < 8.
    La tabella contiene molti dati e non so quale sia il valore Max(RatePagate)
    Comincia con scrivere la select per visualizzare i record che vorresti cancellare,
    ce la mostri
    e poi proviamo ad aiutarti a trasformarla in delete .....

  3. #3
    h0m3r non  in linea Scolaretto
    Ho creato una query direcerca duplicati e poi trasformata in query di eliminazione:
    DELETE BANCA_in_lavorazione.NumPol, BANCA_in_lavorazione.NumRappFinanz, BANCA_in_lavorazione.DataInizioPiano, BANCA_in_lavorazione.DataFinePiano, BANCA_in_lavorazione.NumRata_
    FROM BANCA_in_lavorazione
    WHERE (((BANCA_in_lavorazione.NumRappFinanz) In (SELECT [NumRappFinanz] FROM [BANCA_in_lavorazione] As Tmp GROUP BY [NumRappFinanz] HAVING Count(*)>1 and Min([NumRata_]))));
    
    Il problema che cos impostata la query mi elimina tutti i dati e non i valori Min([NumRata_])

  4. #4
    L'avatar di Max.Riservo
    Max.Riservo non  in linea Scribacchino
    Cominciamo con il correggere il titolo : tu vuoi eliminare i records (in questo caso i records superflui) e non i campi ....

    Partiamo dalla select :
    devi creare un self-join (ovvero la tabella in join con s stessa) utilizzando come chiave del join dire il campo polizza.
    Il join interno deve estrarre i campi polizza e il max(NumRata), ovviamente serve il groupby.
    Il join esterno contiene la condizione fondamentale : NumRata (join esterno) < max(NumRata) join interno

    Prova a scriverla .... se estrai i dati che ti servono (quelli da cancellare) il trasformarla in delete diventa banale .....

  5. #5
    L'avatar di Brontolo
    Brontolo non  in linea Very Important Person
    Ma con "eliminare" intendi effettivamente cancellare quei record o forse vuoi solo escluderli dalla selezione?
    ℹ️ Leggi di pi su Brontolo ...

  6. #6
    L'avatar di Max.Riservo
    Max.Riservo non  in linea Scribacchino
    Quote Originariamente inviato da Brontolo Visualizza il messaggio
    Ma con "eliminare" intendi effettivamente cancellare quei record o forse vuoi solo escluderli dalla selezione?
    Ottima osservazione ......

  7. #7
    h0m3r non  in linea Scolaretto
    Quote Originariamente inviato da Max.Riservo Visualizza il messaggio
    Cominciamo con il correggere il titolo : tu vuoi eliminare i records (in questo caso i records superflui) e non i campi ....
    Come si fa a correggere il titolo?
    Quote Originariamente inviato da Max.Riservo Visualizza il messaggio
    Partiamo dalla select :
    devi creare un self-join (ovvero la tabella in join con s stessa) utilizzando come chiave del join dire il campo polizza.
    Il join interno deve estrarre i campi polizza e il max(NumRata), ovviamente serve il groupby.
    Il join esterno contiene la condizione fondamentale : NumRata (join esterno) < max(NumRata) join interno

    Prova a scriverla .... se estrai i dati che ti servono (quelli da cancellare) il trasformarla in delete diventa banale .....
    SELECT BANCA_in_lavorazione.NumPol
    FROM BANCA_in_lavorazione
    WHERE (((BANCA_in_lavorazione.[NumPol]) in (SELECT BANCA_in_lavorazione.NumPol, Max(BANCA_in_lavorazione.NumRata_) AS MaxDiNumRata_
    FROM BANCA_in_lavorazione where [NumRata_]<MaxDiNumRata_
    GROUP BY BANCA_in_lavorazione.NumPol)));
    
    Durante l'esecuzione della query appare il messaggio: esiste una sottoquery che pu restituire pi campi senza la parola riservata EXIST nella clausola FROM della query principale.

  8. #8
    L'avatar di Max.Riservo
    Max.Riservo non  in linea Scribacchino
    Quote Originariamente inviato da h0m3r Visualizza il messaggio
    Durante l'esecuzione della query appare il messaggio: esiste una sottoquery che pu restituire pi campi senza la parola riservata EXIST nella clausola FROM della query principale.
    Non hai fatto quello che dicevo io ....

    Facciamola pi semplice :
    - crea una query (il famoso join interno) utilizzando la tabella polizza con i campi polizza, max(nRata), groupby polizza)
    - crea una seconda query (il join esterno) utilizzando la tabella polizza e la query precedente. Metti in legame i campi polizza della tabella e della query Metti come condizione (la where) nRata (il campo della tabella) < max(nRata) (il campo della query)

    Se funziona :
    Guarda il costrutto SQL che ti viene creato da access (la seconda query) e se ti va prova a sostituire a mano tutto quello che riguarda la seconda query con quello che trovi come sql nella seconda query) ....

  9. #9
    h0m3r non  in linea Scolaretto
    Quote Originariamente inviato da Max.Riservo Visualizza il messaggio
    Non hai fatto quello che dicevo io ....

    Facciamola pi semplice :
    - crea una query (il famoso join interno) utilizzando la tabella polizza con i campi polizza, max(nRata), groupby polizza)
    - crea una seconda query (il join esterno) utilizzando la tabella polizza e la query precedente. Metti in legame i campi polizza della tabella e della query Metti come condizione (la where) nRata (il campo della tabella) < max(nRata) (il campo della query)

    Se funziona :
    Guarda il costrutto SQL che ti viene creato da access (la seconda query) e se ti va prova a sostituire a mano tutto quello che riguarda la seconda query con quello che trovi come sql nella seconda query) ....
    In base a quello che mi hai scritto dovrebbe essere cos:
    SELECT BANCA_in_lavorazione.NumPol
    FROM BANCA_in_lavorazione INNER JOIN qryEliminaDuplicati ON BANCA_in_lavorazione.NumPol = qryEliminaDuplicati.NumPol
    WHERE (([BANCA_in_lavorazione].[NumRata_]<[qryEliminaDuplicati].[MaxDiNumRata_]));
    

  10. #10
    L'avatar di Max.Riservo
    Max.Riservo non  in linea Scribacchino
    e funziona ?

+ Rispondi al messaggio
Pagina 1 di 2 12 ultimoultimo

Potrebbero interessarti anche ...

  1. ComboBox con valori multipli valore predefinito
    Da massiciatty nel forum Microsoft Access
    Risposte: 8
    Ultimo Post: 22-04-2020, 18:09
  2. Quesito su Maschera con campi di ricerca multipli
    Da mgabrio nel forum Microsoft Access
    Risposte: 7
    Ultimo Post: 26-01-2014, 15:07
  3. problema a filtrare query su campi multipli
    Da thefields nel forum Microsoft Access
    Risposte: 7
    Ultimo Post: 02-02-2012, 11:56
  4. [ORACLE]Eliminare record multipli da tabella
    Da giangi80p nel forum Oracle
    Risposte: 2
    Ultimo Post: 16-04-2011, 14:34
  5. Eliminare righe in base al valore di pi campi
    Da Saint nel forum Microsoft Word
    Risposte: 9
    Ultimo Post: 18-05-2009, 10:18