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

Hybrid View

  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
    Utente bannato
    Registrato dal
    Apr 2024
    Messaggi
    4
    .

  5. #5
    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

  6. #6
    certo, hai ragione, coincidono

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

  7. #7
    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

  8. #8
    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

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

  10. #10
    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

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.