Visualizzazione dei risultati da 1 a 4 su 4

Discussione: Query su valore max

  1. #1
    Utente di HTML.it L'avatar di otello
    Registrato dal
    May 2003
    Messaggi
    296

    Query su valore max

    Buongiorno,
    ho ancora un problema che mi costringe a chiedere aiuto alla vostra esperienza.

    Ho una serie di record in tabella MYSQL.
    codice:
    Tipo			data				MATRICOLA
    P			2011-01-01				10	
    P			2011-05-02   				10
    P			2010-03-10				10	
    T			2010-04-11				10
    T			2010-05-12				11	
    P			2010-07-03				11
    P			2010-05-07				11
    Dovrei impostare una query che restituisca per ogni matricola (presa una sola volta) i valori dei campi corrispondente al valore di “P” con la data maggiore.
    In sostanza dovrei ottenere:
    codice:
    P			2011-05-02   				10
    P			2010-07-03				11
    Mi date gentilmente una mano?
    Grazie

  2. #2
    se non hai altri dati da estrarre prova con:

    codice:
    select tipo, max(data), matricola
    from tabella
    where tipo = 'P'
    group by matricola

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    Utente di HTML.it L'avatar di otello
    Registrato dal
    May 2003
    Messaggi
    296
    Il problema è un tantino più complicato.

    In pratica ho due tabelle e devo estrarre da una dei dati in dipendenza dei valori dell’altra.

    Il campo comune è la matricola e la tabella su cui si agisce possiede dei record con una decina di campi; in ognuno dei record sono presenti tre campi sui quali mi trovo ad agire.

    Supponiamo i miei campi siano : TIPO, DATA e MATRICOLA .

    Il campo TIPO può assumere 3 valori (C,P,T).
    Il tipo record “C” è sempre presente, il tipo record “P” e presente solo se è presente il tipo “C” ed il tipo”T “ è presente solo se c’è il “C” e il “P”.

    Io dovrei estrarre i record di:
    Tutte le matricole con tipo record “C” che non hanno un tipo record “T” o un tipo record “P” e la cui data è minore della data odierna (2011-04-09)

    Se il tipo “P” è presente, allora

    devo estrarre tra quelli che hanno tipo “P”, ma non tipo "T", quello con con data massima, minore della data odierna. (2011-04-09)

    In soldoni, da questi record :
    codice:
    Tipo			data				MATRICOLA
    C			2011-01-01				10		
    P			2011-02-11				10		
    P			2010-03-10				10			
    
    T			2010-10-12				11	
    P			2010-08-03				11
    C			2010-02-07				11
    
    P			2010-07-03				12
    C			2010-02-07				12
    
    C			2010-04-08				13
    Devo ottenere:

    codice:
    P			2010-03-10				10			
    C			2010-04-15				13
    La questione sembra complicata. Io mi sono arenato sulla data max.

    codice:
    (select distinct * FROM tabellaA
    		where matricola
    		not in (select matricola  from tabellaB  where TIPO = 'T' or TIPO = 'P')
    		and data_fine < CURRENT_DATE() 
    		group by matricola
    	    )
    	    union
    	    (
    	    select distinct * from tabellaA
    		where matricola
    		not in (select matricola from tabellaB where TIPO = 'T')
    		and matricola in (select matricola from tabellaB where TIPO = 'P')
                             and TIPO = 'P'        
                     and data_fine < CURRENT_DATE()   
    		group by matricola	    )
    	    order by matricola";
    Così non funge perché prende il primo record di tipo “P” che gli capita e non quello con data max.

    Chi ha tanta pazienza da provare a darmi una mano?

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2011
    Messaggi
    12
    Ciao,

    Prova a guardare questo post, mi sembra di aver capito che entrambi vogliamo ottere un risultato molto simile.

    Ti posso assicurare che ciò che mi è stato suggerito funziona alla perfezione.

    Qui il link al mio post

    Spero possa tornarti utile.

    Ciao

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 © 2025 vBulletin Solutions, Inc. All rights reserved.