Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    Ultimo contratto per ogni codice

    Salve, database MYSQL

    Ho una tabella del tipo:

    id, cliente, data

    1-carlo-10/12/19
    2-pippo-12/12/19
    3-carlo-23/01/20
    4-agata-06/05/21
    5-pippo-02/02/18
    6-pippo-07/10/23

    Vorrei un risultato tipo:

    3-carlo-23/01/20
    4-agata-06/05/21
    6-pippo-07/10/23

    non riesco a farlo utilizzando un unica query
    non ho proprio idea, hoguardato in giro ma non ho trovato niente
    Prima o poi anch'io vi insegnerò qualcosa

  2. #2
    hai già fatto qualche prova? a parità di cliente, la data più alta corrisponde sempre all'id più alto?

  3. #3
    Innanzitutto no, la data più alta non corrisponde sempre all'id più alto, è per questo che nell'esempio ho messo una data più vecchia ad un id più alto.

    Per il resto non sò proprio dove sbattere la testa: lavoro in php e ho sempre utilizzato più query e il tal modo saprei farlo. In sql con query diciamo ricorsive (passami il termine perchè non so se si dice così) non sono mai riuscito a capire come posso fare, dovrei partire dalle basi. Se mi dai due dritte (ma abbastanza elementari), la costruisco pian piano.
    Prima o poi anch'io vi insegnerò qualcosa

  4. #4
    nell'esempio però hai estratto id più alto e data più alta, che appartengono allo stesso record, per cui non si capisce se "ultimo contratto" è per data o per id

  5. #5
    certo, hai ragione, coincidono

    vorrei ordinarli per data
    Prima o poi anch'io vi insegnerò qualcosa

  6. #6
    Questo funziona

    SELECT id, cliente, data FROM (SELECT * FROM clienti ORDER BY data DESC) as t1 WHERE 1 GROUP BY cliente

    mi chiedo però: è la soluzione migliore? (lo chiedo perchè, queste istruzioni sono solo la base di un sacco di query dentro query che dovrei fare per ottenere il mio risultato vero)
    Prima o poi anch'io vi insegnerò qualcosa

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,315
    perdonate l'intromissione non riesco a capire alcuni dettagli.


    tu vuoi estrarre dati dalla tabella che hai postato. Come si chiama la tabella?

    quale è la tabella clienti?


    ad ogni modo..... (se il mio intuito non mi tradisce) farei cosi:

    SQL Firebird/Interbase

    codice:
    select
    cast(right(ultimocontratto.ultimo,10) as integer) ultimoid
    ,cast(left(ultimocontratto.ultimo,10) as date) ultimodata
    ,ultimocontratto.cliente
    from
    (
    select
    contratto.cliente
    ,max(contratto.data||right('          '||contratto.id,10)) ultimo
    from contratto
    group by 1
    ) ultimocontratto
    order by 2
    Ultima modifica di 123delphi321; 13-04-2024 a 09:48

  8. #8
    o anche

    codice:
    SELECT t1.id, t1.cliente, t1.data 
    FROM tabella t1
    JOIN (
    SELECT MAX(data) as data, cliente
    FROM tabella
    GROUP BY cliente) t2
    ON t1.data=t2.data and t1.cliente=t2.cliente
    aggiungi order by dove ti serve
    attento che se un cliente ha due contratti nella stessa data potrebbe ritornare più record

  9. #9
    Quote Originariamente inviata da 123delphi321 Visualizza il messaggio
    perdonate l'intromissione
    mica è una conversazione privata

  10. #10
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,315
    Quote Originariamente inviata da optime Visualizza il messaggio
    ....
    attento che se un cliente ha due contratti nella stessa data potrebbe ritornare più record
    appunto per questo motivo..., avevo suggerito quanto già postato:

    codice:
    select
    contratto.cliente
    ,max(contratto.data||right('          '||contratto.id,10)) ultimo
    from contratto
    group by 1
    
    credo che in MYSQL devi usare la funzione CONCAT al posto di ||
    Ultima modifica di 123delphi321; 13-04-2024 a 21:40

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.