Elenco con prima fattura di ogni cliente

venerdì 01 giugno 2012 - 20.02
Tag Elenco Tags  SQL Server 2005

autosblindo Profilo | Newbie

Ciao,

uso sql 2005 ed ho questa tabella:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

che ho popolato con questi dati d'esempio:
INSERT INTO TEST(CodiceCliente, DataDocumento, NumeroDocumento, Importo) VALUES ('C100', convert(datetime, '20120110', 112), 1, 1000) INSERT INTO TEST(CodiceCliente, DataDocumento, NumeroDocumento, Importo) VALUES ('C100', convert(datetime, '20120210', 112), 6, 1200) INSERT INTO TEST(CodiceCliente, DataDocumento, NumeroDocumento, Importo) VALUES ('C100', convert(datetime, '20120310', 112), 11, 800) INSERT INTO TEST(CodiceCliente, DataDocumento, NumeroDocumento, Importo) VALUES ('C100', convert(datetime, '20120410', 112), 16, 1000) INSERT INTO TEST(CodiceCliente, DataDocumento, NumeroDocumento, Importo) VALUES ('C200', convert(datetime, '20120110', 112), 2, 500) INSERT INTO TEST(CodiceCliente, DataDocumento, NumeroDocumento, Importo) VALUES ('C200', convert(datetime, '20120210', 112), 7, 1800) INSERT INTO TEST(CodiceCliente, DataDocumento, NumeroDocumento, Importo) VALUES ('C200', convert(datetime, '20120310', 112), 12, 1100) INSERT INTO TEST(CodiceCliente, DataDocumento, NumeroDocumento, Importo) VALUES ('C200', convert(datetime, '20120410', 112), 17, 400) INSERT INTO TEST(CodiceCliente, DataDocumento, NumeroDocumento, Importo) VALUES ('C300', convert(datetime, '20120115', 112), 3, 2500) INSERT INTO TEST(CodiceCliente, DataDocumento, NumeroDocumento, Importo) VALUES ('C300', convert(datetime, '20120215', 112), 8, 800) INSERT INTO TEST(CodiceCliente, DataDocumento, NumeroDocumento, Importo) VALUES ('C300', convert(datetime, '20120315', 112), 13, 750) INSERT INTO TEST(CodiceCliente, DataDocumento, NumeroDocumento, Importo) VALUES ('C400', convert(datetime, '20120118', 112), 4, 1800) INSERT INTO TEST(CodiceCliente, DataDocumento, NumeroDocumento, Importo) VALUES ('C400', convert(datetime, '20120418', 112), 19, 2400) INSERT INTO TEST(CodiceCliente, DataDocumento, NumeroDocumento, Importo) VALUES ('C500', convert(datetime, '20120418', 112), 20, 650)

Vorrei poter estrarre per ogni cliente la prima fattura fatta.
Risultato desiderato:
C100 2012-01-10 00:00:00.000 1 1000.00
C200 2012-01-10 00:00:00.000 2 500.00
C300 2012-01-15 00:00:00.000 3 2500.00
C400 2012-01-18 00:00:00.000 4 1800.00
C500 2012-04-18 00:00:00.000 20 650.00

Grazie per l'aiuto.

Carlo.

lbenaglia Profilo | Guru

>Vorrei poter estrarre per ogni cliente la prima fattura fatta.
>Risultato desiderato:
>C100 2012-01-10 00:00:00.000 1 1000.00
>C200 2012-01-10 00:00:00.000 2 500.00
>C300 2012-01-15 00:00:00.000 3 2500.00
>C400 2012-01-18 00:00:00.000 4 1800.00
>C500 2012-04-18 00:00:00.000 20 650.00

Ciao Carlo,

Una delle possibili soluzioni è:

WITH CTE_GetKey(CodiceCliente, DataDocumento) AS ( SELECT CodiceCliente, MIN(DataDocumento) FROM dbo.TEST GROUP BY CodiceCliente ) SELECT T.CodiceCliente , T.DataDocumento , T.NumeroDocumento , T.Importo FROM dbo.TEST AS T JOIN CTE_GetKey AS C ON T.CodiceCliente = C.CodiceCliente AND T.DataDocumento = C.DataDocumento ORDER BY T.CodiceCliente; /* Output: CodiceCliente DataDocumento NumeroDocumento Importo ------------- ----------------------- --------------- --------- C100 2012-01-10 00:00:00.000 1 1000.00 C200 2012-01-10 00:00:00.000 2 500.00 C300 2012-01-15 00:00:00.000 3 2500.00 C400 2012-01-18 00:00:00.000 4 1800.00 C500 2012-04-18 00:00:00.000 20 650.00 (5 row(s) affected) */

>Grazie per l'aiuto.
Prego.

Ciao!
--
Lorenzo Benaglia
http://blogs.dotnethell.it/lorenzo/
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-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5