Newsgroup: it.comp.software.database
Titolo: selezionare ultima data

Ciao,
ho il seguente problema:
data la tabella 'ARTICOLI'
art       data               prezzo
A       20061012         1
A       20070101         2
B       20070101         5
A       20061112         7
C       20061111         3
C       20060911         1
B       20070102         4
cerco una query per avere ogni articolo (ripetuto una sola volta) con
accanto la data maggiore in cui compare in tabella.
Nell'esempio precedente il risultato dovrebbe essere:
A       20070101     2
B       20070102     4
C       20061111     1
Grazie in anticipo.
guido

 Grazie in anticipo.
Prego.
Ciao!
-- 
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo
http://italy.mvps.org

 quantità dell'articolo C riferita all'11 novembre 2006 è 3 non 1 :-)
Beh... è un prezzo, in effetti.
Se nelle specifiche puoi fare a meno di includere nel risultato il
prezzo (ma varia realmente come nell'esempio), potresti usare, in
qualsiasi DB una semplice query:
SELECT art, MAX(data)
FROM dbo.Articoli
GROUP BY art
Lucazeo

 Beh... è un prezzo, in effetti.
Si, giusto, mi sono confuso nel nome ma il discorso non cambia :-)


 sarebbe utile conoscere il DBMS che stai utilizzando.
uso MYSQL
La tua query
SELECT A.* FROM Articoli AS A JOIN (SELECT art, MAX(data) AS data FROM
Articoli GROUP BY art) AS Q
ON A.art = Q.art AND A.data = Q.data ORDER BY A.art;
mi da errore:
Sbaglio nella sintassi?
Grazie
guido

Ho capito qual'e' il problema.
Le subquery sono state implementate dalla MySql 4.1 e io uso MySQL
3.23, per cui non posso mettere una select dentro un'altra.
Grazie lo stesso
guido


Beh se la colonna del prezzo non ti interessa puoi fare come ti ha 
consigliato Lucazeo, altrimenti la stessa soluzione basata su subquery 
che ti ha proposto Lorenzo Benaglia puoi adattarla a mysql < 4.1 usando 
le temporary tables.
Nota bene che l'ho provata su mysql 4.0.24.
Vorrei però aggiungere una nota. Tale soluzione (basata su una join sul 
campo data) in alcune situazioni può risultare inefficace.
Dipende infatti da cosa rappresenta la relazione articoli. Cosa 
succederebbe ad esempio se vi fossero due tuple identiche tranne che per 
il prezzo e la data fosse quella più grande per tale articolo ?
La relazione q avrebbe cardinalità pari al numero di articoli presenti 
nella relazione articoli mentre la query risultante dal join tra 
articoli e j riporterebbe un articoli due volte con entrambi i prezzi.
E questo naturalmente non è il risultato voluto.
Perciò in conclusione occorre almeno ipotizzare che i campi art e data 
siano in chiave primaria insieme.
Ciao
mysql> create table articoli (art varchar(1), data date, prezzo int);
Query OK, 0 rows affected (0.00 sec)
mysql> insert into articoli values('A','2007-01-01',2);
Query OK, 1 row affected (0.00 sec)
mysql> insert into articoli values('A','2007-01-04',3);
Query OK, 1 row affected (0.00 sec)
mysql> insert into articoli values('B','2006-01-04',5);
Query OK, 1 row affected (0.00 sec)
mysql> insert into articoli values('B','2007-01-04',7);
Query OK, 1 row affected (0.00 sec)
mysql> create temporary table q as select art, max(data) as data from 
articoli group by art;
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0
mysql> select a.* from articoli as a join q on (a.art=q.art and a.data 
=q.data) order by a.art;
+------+------------+--------+
| art  | data       | prezzo |
+------+------------+--------+
| A    | 2007-01-04 |      3 |
| B    | 2007-01-04 |      7 |
+------+------------+--------+
2 rows in set (0.00 sec)
mysql> drop table q;
Query OK, 0 rows affected (0.00 sec)