Newsgroup: it.comp.appl.access
Titolo: Lista Articoli gia' forniti ad un cliente

Tabelle Articoli, DocumentiTestate, DocumentiRighe
Come realizzare una query che mi visualizzi una lista articoli, una riga 
per ogni articolo fornito almeno una volta (con 'articolo fornito' 
intendo presente nella DocumentiRighe di quel cliente),  prendendo la 
riga 'ultima' intesa come quella dentro documento piu' recente?
Inizialmente pensavo di fare una join tra testate e righe dei documenti 
del cliente, e raggruppare le righe per Codice Articolo
 
Ma ovviamente non funziona, sia perche' prende dentro righe descrittive, 
sia perche' appaiono anche articoli obsoleti (per obsoleti intendo 
articoli non piu' presenti dentro attuale tabella Articoli), sia perche' 
raggrupando non ho il prezzo ultimo (potrebbe essere diverso da 
fornitura a fornitura)
 
E quindi la domanda e':  come realizzare query che mostri solo le righe 
dove un certo articolo appaia "l'ultima volta" ?


semplificando
 
tabella testate
IDTestata
Num
Data
Idcliente
 
tabella righe
IDRiga
IDTestata
Codice
Descr
Prezzo
 
assumento che il documento più recente sia quello con id più alto
 
creo una query per ottenere l'ultimi id testata per ogni articolo:
UltimeRighe
 
SELECT Max(Testate.idtestata) AS MaxDiidtestata, Testate.IDcliente, 
Righe.codice, Righe.descr
FROM Righe INNER JOIN Testate ON Righe.idtestata = Testate.idtestata
GROUP BY Testate.IDcliente, Righe.codice, Righe.descr;
 
 
seconda query che sfrutta quella qui sopra e ricava il prezzo usato
la chiamo UltimiPrezzi
 
 
SELECT UltimeRighe.MaxDiidtestata, UltimeRighe.IDcliente, 
UltimeRighe.codice, UltimeRighe.descr, (select top 1 prezzo from righe 
where righe.idtestata=maxdiidtestata group by righe.idtestata, prezzo, 
maxdiidtestata) AS UltimoPrezzo
FROM UltimeRighe;
 
 
 
con poco puoi unificarle in una query sola
 
 
tutte le ultime vendite di un cliente si ricuce a :
 
select * from ultimprezzi where idcliente=....
 
 
mi pare funzioni
esempio
 
https://i.imgur.com/xCWbuzA.png
 
 
il cliente 1 ha acquistato l'articolo AAA due volte, il 01/01/2023 a 50 
euro e il 07/01/2023 a 48 euro
 
su ultimi prezzi trovo appunto 48 euro
 
 
BFS
 
 
 
 
 


dimenticavo..le righe descrittive te le elimini con un where cod is not 
null da qualche parte
 
e gli articoli obsoleti con un where cod in (select cod from 
tuaTabellaArticoli)
 
BFS

Il 19/01/2023 08:13, BFS ha scritto:

Ah gia, due query separate, la seconda che usa la prima
Non ci avvo pensatoMi fiondo a provare
Grazie infinite
 

 BFS
 
 
Eccerto, quelli sono gli aggiustamenti finali
Grazie


anche una sola volento
 
 
SELECT  A.MaxDiidtestata, A.IDcliente, A.codice, A.descr, (select top 1 
prezzo from righe where righe.idtestata=maxdiidtestata group by 
righe.idtestata, prezzo, maxdiidtestata) AS UltimoPrezzo     from  (
SELECT Max(Testate.idtestata) AS MaxDiidtestata, Testate.IDcliente, 
Righe.codice, Righe.descr
FROM Righe INNER JOIN Testate ON Righe.idtestata = Testate.idtestata
GROUP BY Testate.IDcliente, Righe.codice, Righe.descr
 
) as A
 
 
BFS
 


Si, ovviamente
Volevo solamente far notare l'utilita' di ottenere un obiettivo 
complesso segmentando la difficolta' con diverse query semplici