Ottenere solo i valori corrispondete ad una riga

di il
8 risposte

Ottenere solo i valori corrispondete ad una riga

Buongiorno a tutti,

sto cercando di strutturare una query in modo tale da ottenere un preciso record.

ID STATO DATA NOME
16080370 H 2018-03-27 11:30:00.000 PIPPO
16080370 H 2018-03-15 09:50:48.000 PLUTO
16080370 H 2018-03-22 15:31:51.000 GIANNI
16080370 H 2018-03-26 11:34:02.000 MARCO
16080370 H 2018-03-27 11:33:10.000 MICHELE
16080370 H 2018-04-09 15:01:29.000 STEFANO
16080370 H 2018-04-04 12:23:12.000 FLAVIO
16080370 H 2018-03-09 19:50:19.000 ZIO
16080370 H 2018-03-09 15:38:33.317 RAFFA

Il record che vorrei che mi uscisse è solo quello con la data più recente

Ma impostando la query in questo modo:

SELECT PR_TICKETS.ID, PR_TICKETS.STATO, MAX(PR_TICKETS_LOG.DATA) AS [DATA], (PR_TICKETS_LOG.NOME) AS NOME
FROM PR_TICKETS INNER JOIN
PR_TICKETS_LOG ON PR_TICKETS.ID_TICKET = PR_TICKETS_LOG.ID_TICKET

GROUP BY PR_TICKETS.ID,PR_TICKETS.STATO,PR_TICKETS_LOG.NOME
HAVING PR_TICKETS.ID='16080370'

Il problema è che mi escono tutte e 9 le righe.

Per fare uscire solo quella che voglio io dovrei togliere la colonna NOME dalla SELECT e dal GROUP BY....ma io voglio che l'informazione del nome venga visualizzata

Come posso risolvere?

Grazie

8 Risposte

  • Re: Ottenere solo i valori corrispondete ad una riga

    Prova con TOP 1
    e ORDER BY DATA DESC
  • Re: Ottenere solo i valori corrispondete ad una riga

    Grazie Max,

    la tua risposta mi ha fatto venire in mente un dettaglio non di poco conto.

    La clausula Having andrà tolta...quindi per ogni ID TICKET dovrà cercarmi quello con data MAX
  • Re: Ottenere solo i valori corrispondete ad una riga

    Sì, non ti serve la clausola HAVING, ti serve una sottoquery da mettere in join con la tabella:
    
    SELECT T.ID T.STATO T.DATA T.NOME
    FROM PR_TICKETS T INNER JOIN (
       SELECT ID, MAX(DATA) AS DataMax
       FROM PR_TICKETS
       GROUP BY ID
    ) V ON (T.ID = V.ID AND T.DATA = V.DataMax)
    
    Ciao.
  • Re: Ottenere solo i valori corrispondete ad una riga

    Ciao Lele,

    nella tua soluzione non vedo più le tabelle PR_TICKET_LOG

    La PR_TICKET dev'essere in Join con la PR_TICKET_LOG
  • Re: Ottenere solo i valori corrispondete ad una riga

    Perchè così non funziona? O forse come al solito sono io che non ho capito...
    
    SELECT        TOP 1  PR_TICKETS.ID, PR_TICKETS.STATO, PR_TICKETS_LOG.DATA, (PR_TICKETS_LOG.NOME) AS NOME
    FROM            PR_TICKETS INNER JOIN
                    PR_TICKETS_LOG ON PR_TICKETS.ID_TICKET = PR_TICKETS_LOG.ID_TICKET
    						 
    WHERE PR_TICKETS.ID='16080370'
    ORDER BY PR_TICKETS_LOG.DATA DESC
    
  • Re: Ottenere solo i valori corrispondete ad una riga

    Grazie Max, la tua soluzione è perfetta nel caso in cui volessi cercare un determinato ID
    Ma se volessi togliere la clausula WHERE non funziona.

    Io ho 1200 ID ticket e per ognuno di questi vorrei avere la riga corrispondente alla data più recente con il Nome corrispondente

    ID STATO DATA NOME
    16080370 H 2018-03-27 11:30:00.000 PIPPO
    16080370 H 2018-03-15 09:50:48.000 PLUTO
    16080370 H 2018-03-22 15:31:51.000 GIANNI
    16080370 H 2018-03-26 11:34:02.000 MARCO
    16080370 H 2018-03-27 11:33:10.000 MICHELE
    16080370 H 2018-04-09 15:01:29.000 STEFANO
    16080370 H 2018-04-04 12:23:12.000 FLAVIO
    16080370 H 2018-03-09 19:50:19.000 ZIO
    16080370 H 2018-03-09 15:38:33.317 RAFFA
    16080371 H 2018-03-09 19:51:13.000 PAOLO
    16080371 H 2018-03-09 15:38:33.317 STEFANO

    etc....
  • Re: Ottenere solo i valori corrispondete ad una riga

    Sorry, non avevo visto bene la tua query e non avevo visto che i dati stavano su due tabelle diverse.

    Questa dovrebbe andare (l'ho scritta un po' di corsa):
    
    SELECT K.ID, K.STATO, L.DATA, L.NOME
    FROM PR_TICKETS K INNER JOIN (
       SELECT T.ID_TICKET, T.DATA, T.NOME
       FROM PR_TICKETS_LOG T INNER JOIN (
          SELECT ID_TICKET, MAX(DATA) AS DataMax
          FROM PR_TICKETS_LOG
          GROUP BY ID_TICKET
       ) V ON (T.ID_TICKER = V.ID_TICKET AND T.DATA = V.DataMax)
    ) L ON (K.ID_TICKET = L.ID_TICKET)
    
    Ciao.
  • Re: Ottenere solo i valori corrispondete ad una riga

    LeleFT ha scritto:


    Sorry, non avevo visto bene la tua query e non avevo visto che i dati stavano su due tabelle diverse.

    Questa dovrebbe andare (l'ho scritta un po' di corsa):
    
    SELECT K.ID, K.STATO, L.DATA, L.NOME
    FROM PR_TICKETS K INNER JOIN (
       SELECT T.ID_TICKET, T.DATA, T.NOME
       FROM PR_TICKETS_LOG T INNER JOIN (
          SELECT ID_TICKET, MAX(DATA) AS DataMax
          FROM PR_TICKETS_LOG
          GROUP BY ID_TICKET
       ) V ON (T.ID_TICKER = V.ID_TICKET AND T.DATA = V.DataMax)
    ) L ON (K.ID_TICKET = L.ID_TICKET)
    
    Ciao.
    Grandissimo Lele...grazie mille!!!!
Devi accedere o registrarti per scrivere nel forum
8 risposte