Newsgroup: it.comp.software.database
Titolo: Ultimo prezzo

Salve a tutti,
ho una tabella in access dove vengono riportati data transazione, id 
dell'articolo, quantità di pezzi acquistati e prezzo di acquisto.
Ora io vorrei estrarre l'elenco degli articoli con l'ultimo prezzo.
Qualcuno sa suggerirmi un modo per farlo ?
Grazie


select id_articolo, last(prezzo) as ultimoprezzo from miatabella group 
by id_articolo

 by id_articolo
Non conoscevo la funziona last. E' standard sql ?
E per fare la stessa cosa con mysql 4.0 come potrei fare?
Grazie ancora


No, non č standard, ma puoi usare la funzione max o min a seconda dei casi.
-- 
Se non conosci la netiquette o il quoting,
ti prego, prima di rispondere, leggi qui:
http://www.marco5x.net/usenet/galateo.php
http://www.marco5x.net/usenet/quoting.php

 No, non č standard, ma puoi usare la funzione max o min a seconda dei casi.
Ti faccio un esempio:
mysql> select * from prova;
id  prezzo   data
1   2.34     2004-11-01
2   1.37     2004-11-04
3   4.59     2004-11-02
vorre poter selezionare l'ultimo prezzo, in questo caso 1.37.
Come faccio?

 Come faccio?
SELECT Prezzo, Data
FROM Prova
ORDER BY Data ASC
LIMIT 1
-- 
Quando noi ignoranti eravamo di più, tutto era più bello (A. Celentano).
  ___   _   ___ _  _______   _______ ___
|   \ /_\ | _ \ |/ / _ ) \ / /_   _| __|
| |) / _ \|   / ' <| _ \\ V /  | | | _|
|___/_/ \_\_|_\_|\_\___/ |_|   |_| |___|

 LIMIT 1
Cioč scusa intendevo ORDER BY Data DESC
-- 
Quando noi ignoranti eravamo di piů, tutto era piů bello (A. Celentano).



Una possibilita' e' la seguente:
select * from prezzi;
+----+------------+--------+
| id | data       | prezzo |
+----+------------+--------+
|  1 | 2004-11-01 |   2.34 |
|  2 | 2004-11-04 |   1.37 |
|  3 | 2004-11-02 |   4.59 |
+----+------------+--------+
select 
a.id
, a.data, a.prezzo from prezzi a left join prezzi b on (a.data < b.data) where b.data is null;
+----+------------+--------+
| id | data       | prezzo |
+----+------------+--------+
|  2 | 2004-11-04 |   1.37 |
+----+------------+--------+
(Occhio! questa query NON usa indici!)
Alternativamente, usando indici sul campo "data" (se ci sono):
select @maxdata := max(data) from prezzi;
+-----------------------+
| @maxdata := max(data) |
+-----------------------+
| 2004-11-04            |
+-----------------------+
select id, data, prezzo from prezzi where data=@maxdata;
+----+------------+--------+
| id | data       | prezzo |
+----+------------+--------+
|  2 | 2004-11-04 |   1.37 |
+----+------------+--------+
Infine, se usi la versione 4.1.x (adesso e' stabile), puoi anche cavartela con una query annidata:
select id, data, prezzo from prezzi where data = (select max(data) from prezzi);
+----+------------+--------+
| id | data       | prezzo |
+----+------------+--------+
|  2 | 2004-11-04 |   1.37 |
+----+------------+--------+
Ciao
gmax
-- 
   ____ ____  _____ _   _
  / _  |    \(____ ( \ / )
( (_| | | | / ___ |) X (
  \___ |_|_|_\_____(_/ \_)
(_____|
MySQL Certified Professional
Sapere, saper fare, fare, far sapere
http://gmax.oltrelinux.com

 
Se sono poche righe, funziona. Ma c'e' un problema:
"If you use LIMIT row_count with ORDER BY, MySQL ends the sorting as soon as it has found the first row_count lines 
rather than sorting the whole table."
http://dev.mysql.com/doc/mysql/en/LIMIT_optimization.html
Quindi e' possibile che il risultato restituito non sia quello voluto.
Francamente a me non e' mai successo che questo tipo di query mi restituisse un valore sbagliato,
ma il fatto che il manuale metta in guardia mi ha convinto a cambiare tattica, e ora uso una delle tecniche
descritte nell'altra mia risposta.
Ciao
gmax
-- 
   ____ ____  _____ _   _


 Come faccio?
Ciao Purtroppo con mysql non sono pratico, però in postgresql così mi 
funziona:
select * from prova join (select id, max(dt_data) as dt_data from prova 
group by id) as foo using (id, dt_data);
M.

Azz questo non lo sapevo!!!
Cercherň altre strade, quando ne avrň bisogno!


Comunque mi sa che non si debba giostrare solo con la data ma anche con 
l'ID.
Infatti non č detto che a una certa data ci sia un solo prezzo.
