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

    MySql operatore MAX e GROUP

    Ciao a tutti, seguo da tempo il forum ma è la prima volta che apro una discussione. Spero possiate aiutarmi.
    Ho creato un mio applicativo per la gestione delle pratiche in ufficio con Php su DB MySql ma sono incastrato su un problema che magari è una cavolata.

    Ho due tabelle "gst_giornale" e "gst_commesse".
    La tabella gst_giornale contiene le note relative alla commessa. Ogni nota ha una data. Ogni nota ha il campo "id_commessa".
    La tabella gst_commesse contiene la descrizione della commessa e altri dati tra cui il "num_status" che è lo status a cui si trova la commessa.

    Vorrei trovare tutte le note delle commesse con status 27 aventi la data più recente.

    Ho scritto questa:

    SELECT gst_commesse.id_commessa,descrizione_com,nota_gior nale,MAX(data_giornale) as maxdata
    FROM gst_giornale, gst_commesse
    WHERE gst_commesse.id_commessa = gst_giornale.id_commessa
    AND num_status = 27
    GROUP BY gst_giornale.id_commessa
    ORDER BY data_giornale DESC

    che mi sembrava funzionare e invece ... non è giusta. Infatti (e giustamente) l'operatore MAX trova si la data più recente tra le note della commessa ma il contenuto della nota non è quella relativa al record avente la data più recente. Mi trova separatamente la data più recente di ogni nota della commessa ed il primo record presente in tabella delle note relative alla commessa stesse.

    Non riesco a venirne a capo ... e scusate se nel descrivere il tutto non sono stato tanto "stringato" ...

  2. #2
    Utente di HTML.it L'avatar di Joe Taras
    Registrato dal
    Nov 2003
    residenza
    Taranto
    Messaggi
    955

    Re: MySql operatore MAX e GROUP

    Originariamente inviato da juliusgg
    Ciao a tutti, seguo da tempo il forum ma è la prima volta che apro una discussione. Spero possiate aiutarmi.
    Ho creato un mio applicativo per la gestione delle pratiche in ufficio con Php su DB MySql ma sono incastrato su un problema che magari è una cavolata.

    Ho due tabelle "gst_giornale" e "gst_commesse".
    La tabella gst_giornale contiene le note relative alla commessa. Ogni nota ha una data. Ogni nota ha il campo "id_commessa".
    La tabella gst_commesse contiene la descrizione della commessa e altri dati tra cui il "num_status" che è lo status a cui si trova la commessa.

    Vorrei trovare tutte le note delle commesse con status 27 aventi la data più recente.

    Ho scritto questa:

    SELECT gst_commesse.id_commessa,descrizione_com,nota_gior nale,MAX(data_giornale) as maxdata
    FROM gst_giornale, gst_commesse
    WHERE gst_commesse.id_commessa = gst_giornale.id_commessa
    AND num_status = 27
    GROUP BY gst_giornale.id_commessa
    ORDER BY data_giornale DESC

    che mi sembrava funzionare e invece ... non è giusta. Infatti (e giustamente) l'operatore MAX trova si la data più recente tra le note della commessa ma il contenuto della nota non è quella relativa al record avente la data più recente. Mi trova separatamente la data più recente di ogni nota della commessa ed il primo record presente in tabella delle note relative alla commessa stesse.

    Non riesco a venirne a capo ... e scusate se nel descrivere il tutto non sono stato tanto "stringato" ...
    codice:
    SELECT c.id_commessa, descrizione_com, nota_giornale, data_giornale
    FROM gst_giornale g
    JOIN gst_commesse c
    where g.id_commessa = c.id
    and g.num_status = 27
    and not exists(
    	select 'x'
    	from gst_giornale g2
    	where g2.id_commessa = g.id_commessa
    	and g2.data_giornale > g.data_giornale)

  3. #3
    ... funziona !!!
    ho solo fatto una piccola correzione, una c al posto della g nel where. (c.num_status).

    SELECT c.id_commessa, c.descrizione_com, g.nota_giornale, g.data_giornale
    FROM gst_giornale as g
    JOIN gst_commesse as c
    WHERE g.id_commessa = c.id_commessa
    AND c.num_status = 27
    AND not exists(
    select 'x'
    from gst_giornale g2
    where g2.id_commessa = g.id_commessa
    and g2.data_giornale > g.data_giornale)




    Ieri avevo risolto con due query separate in un ciclo while nel file php ma questa è la query giusta.
    Grazie mille !!!!!
    Giuliano

  4. #4
    Utente di HTML.it L'avatar di Joe Taras
    Registrato dal
    Nov 2003
    residenza
    Taranto
    Messaggi
    955
    Originariamente inviato da juliusgg
    ... funziona !!!
    ho solo fatto una piccola correzione, una c al posto della g nel where. (c.num_status).

    SELECT c.id_commessa, c.descrizione_com, g.nota_giornale, g.data_giornale
    FROM gst_giornale as g
    JOIN gst_commesse as c
    WHERE g.id_commessa = c.id_commessa
    AND c.num_status = 27
    AND not exists(
    select 'x'
    from gst_giornale g2
    where g2.id_commessa = g.id_commessa
    and g2.data_giornale > g.data_giornale)




    Ieri avevo risolto con due query separate in un ciclo while nel file php ma questa è la query giusta.
    Grazie mille !!!!!
    Giuliano
    Ok

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.