Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    Query per prelevare un solo valore da una relazione uno a molti

    Buongiorno,

    ho la seguente situazione che descrivo con due tabelle inventate:

    Tabella "nomi" che contiene il campo Id e Nome
    --------
    Id, Nome
    --------
    1, Mario
    2, Pierino
    3, Mauro
    4, Marco

    Tabella "date" che contiene i campi IdNome e Data:
    ------------
    IdNome, Data
    ------------
    4, 15-03-2018
    1, 22-03-2018
    4, 10-03-2019
    1, 12-05-2019
    2, 22-02-2020
    4, 27-04-2020

    La seguente query:
    SELECT nomi.Id, nomi,Nome, date.Data
    FROM nomi LEFT JOIN date ON nomi.Id = date.IdNome
    WHERE (Nome LIKE 'M%')

    Mi restituisce i valori:
    Mario - 22-03-2018
    Mario - 12-05-2019
    Mauro -
    Marco - 15-03-2018
    Marco - 10-03-2019
    Marco - 27-04-2020

    Io invece vorrei ottenere un solo record per ogni nome, abbinato alla data più recente, ovvero:

    Mario - 12-05-2019
    Mauro -
    Marco - 27-04-2020

    Mi vergogno a chiederlo ma non riesco a capire come fare.
    Qualcuno cortesemente sa indicarmi come devo modificare o cosa devo aggiungere alla query?
    Inutile dire che con le mie ricerche sul web non ho trovato la soluzione.
    www.positivamente.it - Soluzioni per vivere meglio

  2. #2
    SELECT nomi.Id, nomi.Nome, MAX(date.Data)
    FROM nomi LEFT JOIN date ON nomi.Id = date.IdNome
    WHERE (Nome LIKE 'M%')
    GROUP BY nomi.Id, nomi.Nome

  3. #3
    in pratica chiedi di raggruppare (GROUP BY) per nomi.id e nomi.nome, e di mostrare la data massima (MAX(date.data)) per ogni raggruppamento (oltre alle due chiavi di raggruppamento)

  4. #4
    Quote Originariamente inviata da optime Visualizza il messaggio
    SELECT nomi.Id, nomi.Nome, MAX(date.Data)
    FROM nomi LEFT JOIN date ON nomi.Id = date.IdNome
    WHERE (Nome LIKE 'M%')
    GROUP BY nomi.Id, nomi.Nome
    Caro optime, sei un mito!
    Io avevo provato la funzione MAX, ma mi restituiva un solo record; quello con la data più recente tra tutti.
    In realtà non mettevo la clausola GROUP BY!
    Grazie mille!
    www.positivamente.it - Soluzioni per vivere meglio

  5. #5

  6. #6
    Grazie mille per l'indicazione.
    Mi sono accorto ora che nel titolo iniziale avrei dovuto mettere il tipo di database a cui faccio riferimento (nel mio caso MySQL) ma non trovo la possibilità di modificare il titolo del mio primo messaggio.
    Infatti non vedo nemmeno alcuna discussione con la scritta [Risolto] come si usa in altri forum tecnici.
    www.positivamente.it - Soluzioni per vivere meglio

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