>per curiosita dato che sono una bestia e nel 90% dei casi scrivo
>join utilizzando where id1=id2
>del tipo where ag.id_agenzia=td.id_agenzia
>come si potrebbe scrivere questa query utilizzando questo tipo
>di join
>sempre che sia possibile!
Per essere possibile lo è, ma le condizioni che si specificano nella clausola WHERE dovrebbero servire esclusivamente come criteri di ricerca per filtrare le righe che si intende restituire.
Comunque, questa è la (brutta) query che hai chiesto:
SELECT MA.id_agenzia, MA.saldo
FROM dbo.movimenti_agenzie AS MA, (
SELECT id_agenzia, MAX(data_operazione) AS UltimaOperazione
FROM dbo.movimenti_agenzie
GROUP BY id_agenzia
) AS Q
WHERE MA.id_agenzia = Q.id_agenzia
AND MA.data_operazione = Q.UltimaOperazione;
>cmd mi sto allenando per scrivere query standard!!
SQL Server 2005 introduce le Common Table Expression che puoi immaginare come un resultset temporaneo valido solo per un singolo comando di SELECT, INSERT, UPDATE, DELETE, o CREATE VIEW.
Le CTE permettono di risolvere brillantemente il problema delle query ricorsive ma possono servire anche per riscrivere in modo più elegante query comuni:
WITH CTE_UltimiMovimenti(id_agenzia, UltimaOperazione) AS
(
SELECT id_agenzia, MAX(data_operazione)
FROM dbo.movimenti_agenzie
GROUP BY id_agenzia
)
SELECT MA.id_agenzia, MA.saldo
FROM dbo.movimenti_agenzie AS MA
JOIN CTE_UltimiMovimenti AS CTE
ON MA.id_agenzia = CTE.id_agenzia
AND MA.data_operazione = CTE.UltimaOperazione;
>Grazie di tutto
Prego.
Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org