Newsgroup: it.comp.software.database
Titolo: [MySQL] Prelevare solo i record del mese piu' recente

Salve a tutti, come da topic mi servirebbe prelevare tutti i record
del mese più recente relativi al campo data (nel senso che non mi
serve il mese corrente, ma il mese più recente tra il campo data dei
record e quindi tutti i record dello stesso mese).
Sapete come posso fare?
ciao
-- 
Giacomo, alias
Marthy, A.S.Friends (239878), V.185
Tessera #139 del Club dei Mille

SELECT *
FROM TuaTabella
WHERE
MONTH(CampoData) = ( SELECT MAX(MONTH(CampoData))
                      FROM TuaTabella
                    )
-- 
Quando noi ignoranti eravamo di piů, tutto era piů bello...
(A. Celentano)
Per rispondermi in privato, prima togli l'immondizia dalla testa.

                    )
Mannaggia...ho il mysql che non supporta le subquery...=(((


Allora prova con due query (perň con la stessa connessione):
1) SET @mese = (SELECT MAX(MONTH(CampoData)) FROM TuaTabella)
2) SELECT *
    FROM TuaTabella
    WHERE MONTH(CampoData) = @mese
-- 
Quando noi ignoranti eravamo di piů, tutto era piů bello (A. Celentano).
  ___   _   ___ _  _______   _______ ___
|   \ /_\ | _ \ |/ / _ ) \ / /_   _| __|
| |) / _ \|   / ' <| _ \\ V /  | | | _|
|___/_/ \_\_|_\_|\_\___/ |_|   |_| |___|

 record e quindi tutti i record dello stesso mese).
Dalla pagina del manuale MySQL
http://dev.mysql.com/doc/mysql/en/Date_and_time_functions.html
Here is an example that uses date functions. The following query selects all
records with a date_col value from within the last 30 days:
SELECT something FROM tbl_name
    -> WHERE DATE_SUB(CURDATE(),INTERVAL 30 DAY) <= date_col;


bella seccatura ....
prova cosě
-----------------
SELECT T1.Campo1, T1.Data
FROM Tabella1 AS T1,
     Tabella1 AS T2
WHERE Year(T1.Data)=2005 AND
      Year(T2.Data)=2005
GROUP BY T1.Campo1,T1.Data
HAVING Month(T1.Data)=Max(Month(T2.Data))
------------------
Ciao Giorgio

------------------
Ottimo, dovrebbe funzionare (ho fatto solo una prova)...solo una
modifica. Il group by deve essere fatto solo con il Campo1 e non con
il campo Data, altrimenti mi perdo i record che hanno la stessa data.


    -> WHERE DATE_SUB(CURDATE(),INTERVAL 30 DAY) <= date_col;
E' che a me non servono i record degli ultimi 30 giorni, ma mi serve
prelevare il mese più recente tra tutti i record e poi prelevare tutti
i record con quel mese.



umm,
tutti i campi presenti nella SELECT che non sono sottoposti a funzioni di
aggregazione devono essere indicati nella GROUP BY.
Per non perdere le righe con le date uguali devi includere nella SELECT e
nella GROUP BY un campo o una serie di campi che identificano in modo
univoco il record.
Ciao Giorgio

univoco il record.
Dovrebbe essere un problema di MSSQL Server, non di mysql (che infatti
sembra non avere problemi).



non è proprio così :-)
l'SQL standard prevede di indicare i campi non sottoposti a funzioni di
aggregazione nella group By.
MySql ti permette di farlo se non lo usi in modalità ANSI.
------------------
MySQL extends the use of GROUP BY so that you can use columns or
calculations in the SELECT list that don't appear in the GROUP BY clause.
http://dev.mysql.com/doc/mysql/en/GROUP-BY-hidden-fields.html
------------------
Ciao Giorgio

 news:dtovu056vv3dbfi2v...@4ax.com...
in particolare leggi attentamente questo passo
--------
Do not use this feature if the columns you omit from the GROUP BY part are
not unique in the group! You will get unpredictable results.
--------
Ciao Giorgio

--------
Perfetto, grazie per le info.
-- 

HAVING Month(T1.Data)=Max(Month(T2.Data))
Ciao, riapro questo thread perchè ho un problema.
Questa query funziona, ma a me serve una query che mi dia gli stessi
risultati ma con una "select count() ..."
Ho provato con:
SELECT count( ) AS total
FROM Tabella1 AS T1, Tabella1 AS T2
WHERE Year( T1.Data ) =2005 AND Year( T2.Data ) =2005
GROUP BY T1.Campo1, T1.Data
HAVING Month( T1.Data ) = Max( Month( T2.Data ) )
Ma ottengo un errore ( escludendo i vari errori di sintassi che ho
fatto riscrivendo qui la query ).
Sai come posso risolvere?
ciao


 Sai come posso risolvere?
a prescindere dalla count che vuoi ottenere c'č un errore di sintassi .
Al posto di  SELECT count( )
metti SELECT count(1) AS Total
 o SELECT count(*) AS Total
 o SELECT count(T1.Data) AS Total
o forse avevi fatto cosě e l'errore č un atro ? se Sě che errore ricevi ?
Ciao Giorgio