Newsgroup: it.comp.lang.visual-basic
Titolo: Problema con query

Ho un problema con una query in un piccolo progetto VB... :(
Ho la seguente tabella
ID            Int
ArticoliID    Int
Data          DateTime
QT            Float
Supponiamo di avere i seguenti dati:
ID    Data           ArticoliID        QT
1     01/01/2010     1                 2
2     01/01/2010     2                 4
3     01/01/2010     1                 5
4     05/01/2010     1                 2
5     04/01/2010     1                 1
6     03/01/2010     1                 6
La query mi dobrebbe dare l'ultima data, con relativo articoliid e
quantità dei dati raggruppati per ArticoliID.
Il risultato dovrebbe essere:
ID    Data           ArticoliID        QT
4     05/01/2010     1                 2
2     01/01/2010     2                 4
Possibile che non sia possibile farla con SQL?

La query mi dobrebbe dare l'ultima data, con relativo articoliid e
quantità dei dati raggruppati per ArticoliID.
...
non ho capito cosa intendi esattamente...
possibile che quello che ti serve e' solo un "Order By Data Desc" ?

 Possibile che non sia possibile farla con SQL?
Tipo questa?
Select ArticoliID, Max(DATA), Sum (QTA)
From Tabella
Group By ArticoliID
Order By ArticoliID
Se devi avere anche il campo ID allora devi fare una subquery per forza.

On 12 Lug, 11:22, "Andrea [Work]"

No... diciamo che ho appena trovato un modo... anche se la query e'
molto lenta...
Purtroppo non mi serve ne il max(data)... ma come se fosse Last(Data)
o Top 1... ho risolto cmq nel seguente modo:
Select ArticoliID, (Select Top 1 Data From Articoli Where ID =
ArticoliID Order by Data Desc), (Select Top 1 QT From Articoli  Where
ID = ArticoliID Order by Data Desc)
From XXXXXXX
La query del progettino e' piu' complessa... questa e' una sintesi...
In questo modo ho tutti gli articoli con il riferimento dell'ultima
vendita...
Sarebbe carino se la tecnica della query in linea restituisse piu'
campi.... o trovare un modo per fare un group by generico... e
metterlo in inner join...

 From XXXXXXX
In pratica ti servono i dati dell'ultimo movimento per ogni articolo?
Select T1.*
From ArticoliID As T1
WHERE 
T1.ID
= (Select Top 1 
T2.ID
 From T2.Articoli As T2 Where
T2.ArticoliID=T1.ArticoliID Order by T2.Data Desc)
Anche una cosa del genere dovrebbe andare bene, probabilmente va più
veloce, e non cambia velocità quando hai più campi.

 ha scritto nel messaggio 
news:f30a74a3-3591-4403...@y4g2000yqy.googlegroups.com...

Prova questa:
SELECT DISTINCT ID, Data, ArticoliID, QT
FROM tabella AS T1
WHERE EXISTS (
    SELECT ArticoliID, MAX(Data)
    FROM tabella AS T2
    GROUP BY ArticoliID
    HAVING T1.ArticoliID=T2.ArticoliID
    AND T1.Data=MAX(T2.Data)
)
Bye
Raf 

On 12 Lug, 11:40, "Andrea [Work]"

Perfetto... grazie... l'ho provato e l'analisi della query riporta in
incremento delle prestazioni del 50%...
Ancora grazie e ciaooo

 From XXXXXXX
Mi pare di capire che tu voglia trovare l'ultimo articolo venduto.
Ponendo che non se ne vendano N al giorno o che, in questo caso, vi
fosse data-ora e non solo una data, io farei:
SELECT * FROM Articoli
Where Data = (Select Max(Data) From Articoli)
Che dovrebbe essere il più veloce.
Nicola

 fosse data-ora e non solo una data, io farei:
Ad occhio direi che gli interessa vedere l'ultimo movimento per ogni
articolo.


Allora la tua query
Select ArticoliID, Max(DATA), Sum (QTA)
From Tabella
Group By ArticoliID
Order By ArticoliID
andrebbe modificata solo con:
Select ArticoliID, Max(DATA), QTA <--- NOTARE: ho tolto la SUM
From Tabella
Group By ArticoliID, QTA
Order By ArticoliID
Restituendo ciò che a lui serve.
Nicola

 Restituendo ciò che a lui serve.
Ni, non restituisce l'ultima data ma la più grande, ma anche in quel caso
restituisce una Qta raggruppata, che non è quella associata all'ultima
data.
Vedi quella che gli ho postato sopra, intendeva quello.

 Vedi quella che gli ho postato sopra, intendeva quello.
Ok, adesso ho capito.
Nicola