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

Discussione: Problema con GROUP BY

  1. #1

    Problema con GROUP BY

    Buondì.

    In una tabella ho diversi record che hanno campo1 in comune, mentre campo2, che è un datetime, diverso.

    Io vorrei estrarre un record per ogni valore di campo1, ma tra quelli con campo1 identico vorrei quello con la data in campo2 più alta.

    Facendo GROUP BY su campo1 mi sa che non posso decidere quale record verrà selezionato, perché l'ORDER BY viene processato dopo il GROUP BY.

    Usando subquery o join riesco a farlo tranquillamente, mi chiedevo se ci fosse il modo per farlo con una query semplice.
    Grazie

  2. #2
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    ciao skidx, non è sufficiente una query del genere?

    SELECT campo1, max(dataora) AS maggiore
    FROM tabella
    GROUP BY campo1;

  3. #3
    ciao,
    ci avevo già pensato, il problema è che in quel modo prende come dataora quella maggiore, ma gli altri campi no, restano quelli del record scelto arbitrariamente dal group by (di solito sono ordinati per chiave), mentre io vorrei tutto il record corrispondente, non solo la data.

  4. #4
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    E così?

    SELECT * , max( dataora ) AS maggiore
    FROM tabella
    GROUP BY campo1
    HAVING MAX( dataora ) = maggiore;

  5. #5
    è uguale:
    prima esegue il group by (scegliendo arbitrariamente il record), poi sul raggruppamento applica la clausola dell'having, che a quel punto è inutile, sarebbe sempre vera

  6. #6
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Hai ragione,scusa.

  7. #7
    Originariamente inviato da nicola75ss
    scusa.
    ma di che?, figurati, anzi grazie per il tentativo.

    Mi sa che senza join non si può

  8. #8
    Utente di HTML.it L'avatar di chris
    Registrato dal
    Sep 1999
    Messaggi
    1,568
    Originariamente inviato da skidx
    Mi sa che senza join non si può
    Te lo posso quasi assicurare, ci ho provato diverse volte nel giro di cinque anni per rivedere la struttura di un forum scritto male ma non ci sono mai riuscito :E
    "Nei prossimi tre anni col mio governo vogliamo vincere anche il cancro, che colpisce ogni anno 250.000 italiani e riguarda quasi due milioni di nostri concittadini"

  9. #9
    anche con la join in effetti ho avuto difficoltà (qua penso sia per mia incapacità ), il metodo più semplice che mi è venuto in mente prevede una join con una tabella creata con subquery, ma sono quasi certissimo ci sia il modo più semplice, ma ora non mi viene :master:

    la mia query è così:

    SELECT campo1, campo2 FROM tabella INNER JOIN (SELECT campo1 AS max_campo1, MAX(campo2) AS max_date FROM tabella GROUP BY max_campo1) AS tabella2 ON campo1 = tabella2.max_campo1 WHERE campo2 = tabella2.max_date

    Senza falsa modestia, direi che faccia abbastanza schifo

  10. #10
    perchè fai una join in quel modo li? che rallenta non poco, non ti conviene fare select... from tabella inner join tabella as tab ?

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.