Newsgroup: it.comp.appl.access
Titolo: [HELP] Query di selezione elemento

Salve a tutti,
ho un problema con una query.
Ho due tabelle che descrivono una i prodotti e l'altra i prezzi che ha
avuto nel tempo.
Più o meno così:
[PRODOTTI]
-IDprodotto int
-nome varchar
-codice int
[PREZZI]
-codice int
-data date
-prezzo float
Ora le due tabelle sono collegate attraverso il campo codice.
Il mio obiettivo è quello di recuperare il prezzo più "nuovo" del prodotto.
Come posso fare?
Una struttura della query potrebbe essere:
SELECT nome, prezzo
FROM PRODOTTI
INNER JOIN PREZZI ON PRODOTTI.codice = PREZZI.codice
GROUP BY codice
Però così mi prende il primo prezzo che gli capita...dovrei ordinare la
tabella prezzo...ma come fare?! :P
Ps: vorrei evitare di usare una sotto-query.
Grazie a tutti!

 Il mio obiettivo è quello di recuperare il prezzo più "nuovo" del prodotto.
SELECT Prodotti.id, Prodotti.codice, Prodotti.Nome, UltimiPrezzi.Prezzo
FROM Prodotti INNER JOIN (
     SELECT Prezzi.Codice, Prezzi.Data, Prezzi.Prezzo
     FROM Prezzi INNER JOIN (
          SELECT Prezzi.Codice, Max(Prezzi.Data) AS UltimaData
          FROM Prezzi GROUP BY Prezzi.Codice
     ) AS UltimiAggiornamenti
     ON Prezzi.ID=UltimiAggiornamenti.ID AND
Prezzi.Data=UltimiAggiornamenti.UltimaData
) AS UltimiPrezzi
ON  Prodotti.codice=UltimiPrezzi.codice
Senza sottoquery lo trovo abbastanza difficilotto...
cia'
Max

 -prezzo float
Dato che hai già ottenuto diverse soluzioni, mi permetto solo di suggerirti
(anche se so che quanto hai postato rappresenta solo un abbozzo) di evitare
l'utilizzo del tipo di dati Float per i prezzi, in quanto la sua
"imprecisione" potrebbe dare errori in seguito a calcoli successivi.
Molto meglio il Decimal :-)
P.S. Ho visto il crosspost sy f.i.d.mysql, m.p.i.o.access e
it.comp.appl.access. Evita il crosspost e, specialmente, scegli il DBMS che
desideri utilizzare in modo da avere risposte più mirate e precise.
Ciao!
-- 
VeroToad(2006) from Milan
My blog: 
http://blogs.dotnethell.it/VeroToad

Il /10 gen 2007/, *Pablo* ha scritto:
Le risposte già pervenute sono state più che esaustive ed il mio post 
è solo a titolo informativo.
Stando in ambiente SQL Server e più precisamente in SQL 2005, possiamo 
anche utilizzare una delle migliori funzionalità introdotte con questa 
versione di SQL Server: le CTE (Common Table Expression).
use tempdb
set nocount on
-- Creo le due tabelle
Create table PRODOTTI 
	(
	IDprodotto int,
	nome varchar(25),
	codice int
	)
Create table PREZZI
	(
	codice int,
	data smalldatetime,
	prezzo float
	)
-- Inserisco alcuni valori
insert into Prodotti values(1 , 'libro', 1)
insert into Prodotti values(2 , 'carta', 2)
insert into Prodotti values(3 , 'biro', 3)
insert into Prodotti values(4 , 'matita', 4)
insert into Prezzi values(1, '20060101', 1.5)
insert into Prezzi values(1, '20060115', 1.8)
insert into Prezzi values(2, '20060312', 0.6)
insert into Prezzi values(2, '20060501', 0.4)
insert into Prezzi values(3, '20060611', 2.0)
insert into Prezzi values(4, '20060509', 1.7)
GO
-- Creo una CTE (Common Table Expression)
WITH PrezziMax (Codice, Data) AS
	(
	Select 
		Codice,	
		max(Data) as Data
	From Prezzi
	Group BY Codice
	)
Select 
	B.Codice,
	B.Data,
	A.Prezzo
From Prezzi A
Inner Join PrezziMax B on B.Codice = A.Codice and B.Data = A.Data 
-- Elimino le tabelle utilizzate
Drop Table Prodotti
Drop Table Prezzi
Maggiori informazioni sui BOL e a questo link
http://tinyurl.com/ykj2dt
-- 
(Postate i comandi DDL per la creazione delle tabelle)
===================================
Sandro Bizioli
http://blogs.dotnethell.it/sandro/
===================================