Restituire l'ultimo prezzo di un articolo

giovedì 06 settembre 2007 - 10.38

Carlik Profilo | Junior Member

Salve,
Ho una tabella Testata(RELDoc,Data) e una tabella DettagliAcquisti(RELDoc,RELArticolo,Prezzo)
Vorrei creare una select che mi restituisca , per ogni articolo acquistato , l'ultimo prezzo d'acquisto.
Ancora non sono riuscito.Qualche idea?

lbenaglia Profilo | Guru

>Ho una tabella Testata(RELDoc,Data) e una tabella DettagliAcquisti(RELDoc,RELArticolo,Prezzo)
>Vorrei creare una select che mi restituisca , per ogni articolo
>acquistato , l'ultimo prezzo d'acquisto.
>Ancora non sono riuscito.Qualche idea?

Ciao Carlik,

Che RBDMS utilizzi?
Puoi postare i comandi DDL di CREATE TABLE completi di constraints (altrimenti non si capisce come sono relazionate le due tabelle)?
Puoi postare i comandi DML di INSERT relativi ad una decina di righe ed il result set finale che vorreti ottenere con quei dati?

Ciao!

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

Carlik Profilo | Junior Member

Si, certo :
Utilizzo SqlServer express le due tabelle sono :

CREATE TABLE [dbo].[M_Testata_Acquisti](
[RELDoc] [int] NOT NULL,
[Data] [datetime] NULL,
CONSTRAINT [PK_TestataMag] PRIMARY KEY CLUSTERED
(
[RELDoc] ASC
)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

CREATE TABLE [dbo].[M_Dettagli_Acquisti](
[RELDettagli_Acquisti] [int] IDENTITY(1,1) NOT NULL,
[RELArticolo] [int] NULL,
[RELDoc] [int] NULL,
[Prezzo] [money] NULL,
CONSTRAINT [PK_DettagliAcquisti] PRIMARY KEY CLUSTERED
(
[RELDettagli_Acquisti] ASC
)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

Ovviamente nelle due tabelle ci sono altri campi,che non ho inserito per comodità.
In pratica avremo nella prima tabella M_Testata_Acquisti :
RELDoc Data
1 3/3/2007
2 3/3/2007
3 4/3/2007


Nella seconda(RELDettagliAcquisti chiave incrementale omessa)
RELArticolo RELDoc Prezzo
3 1 x
4 1 y
3 3 z
3 3 t

Dovrebbe restituire
Data RELArticolo Prezzo
4/3/2007 3 t
3/3/2007 4 y

Grazie,a presto

Carlik Profilo | Junior Member

Dimenticavo :

INSERT INTO [M_Testata_Acquisti]([RELDoc],[Data])VALUES(1,'3/7/2007')
INSERT INTO [M_Testata_Acquisti]([RELDoc],[Data])VALUES(2,'3/7/2007')
INSERT INTO [M_Testata_Acquisti]([RELDoc],[Data])VALUES(3,'4/7/2007')

INSERT INTO [M_Dettagli_Acquisti]([RELArticolo],[RELDoc],[PrezzoScontato])VALUES(3,1,2)
INSERT INTO [M_Dettagli_Acquisti]([RELArticolo],[RELDoc],[PrezzoScontato])VALUES(4,1,20)
INSERT INTO [M_Dettagli_Acquisti]([RELArticolo],[RELDoc],[PrezzoScontato])VALUES(3,3,2)
INSERT INTO [M_Dettagli_Acquisti]([RELArticolo],[RELDoc],[PrezzoScontato])VALUES(3,3,10)

Ciao

lbenaglia Profilo | Guru

>Dimenticavo :
SNIP

Che relazione esiste tra le due tabelle?
1 a molti tra M_Testata_Acquisti e M_Dettagli_Acquisti?

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

lbenaglia Profilo | Guru

Prova a vedere se questo esempio può andare:

USE tempdb; CREATE TABLE dbo.M_Testata_Acquisti( RELDoc int NOT NULL, Data datetime NULL, CONSTRAINT PK_TestataMag PRIMARY KEY(RELDoc) ); CREATE TABLE dbo.M_Dettagli_Acquisti( RELDettagli_Acquisti int IDENTITY NOT NULL, RELArticolo int NULL, RELDoc int NULL, Prezzo money NULL, CONSTRAINT PK_DettagliAcquisti PRIMARY KEY(RELDettagli_Acquisti), CONSTRAINT FK_Dettagli_Testata FOREIGN KEY(RELDoc) REFERENCES dbo.M_Testata_Acquisti(RELDoc) ); INSERT dbo.M_Testata_Acquisti VALUES(1, '20070703'); INSERT dbo.M_Testata_Acquisti VALUES(2, '20070703'); INSERT dbo.M_Testata_Acquisti VALUES(3, '20070704'); INSERT dbo.M_Dettagli_Acquisti VALUES(3, 1, 2); INSERT dbo.M_Dettagli_Acquisti VALUES(4, 1, 20); INSERT dbo.M_Dettagli_Acquisti VALUES(3, 3, 2); INSERT dbo.M_Dettagli_Acquisti VALUES(3, 3, 10); WITH CTE_GetUltimiAcquisti AS ( SELECT RELArticolo, MAX(RELDettagli_Acquisti) AS RELDettagli_Acquisti FROM dbo.M_Dettagli_Acquisti GROUP BY RELArticolo ), CTE_GetUltimiPrezzi AS ( SELECT UA.RELArticolo, D.RELDoc, D.Prezzo FROM CTE_GetUltimiAcquisti AS UA JOIN dbo.M_Dettagli_Acquisti AS D ON UA.RELDettagli_Acquisti = D.RELDettagli_Acquisti ) SELECT T.Data, UP.RELArticolo, UP.Prezzo FROM dbo.M_Testata_Acquisti AS T JOIN CTE_GetUltimiPrezzi AS UP ON T.RELDoc = UP.RELDoc; /* Output: Data RELArticolo Prezzo ----------------------- ----------- --------------------- 2007-07-04 00:00:00.000 3 10,00 2007-07-03 00:00:00.000 4 20,00 (2 row(s) affected) */ DROP TABLE dbo.M_Dettagli_Acquisti, dbo.M_Testata_Acquisti;

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

Carlik Profilo | Junior Member

Grazie 1000!!!!
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5