Selezionare le righe nella mia tabella (con i relativi campi) controll...

venerdì 19 giugno 2009 - 12.07

ciccios100 Profilo | Junior Member

Ciao a tutti,
Ragazzi oggi posto su un argomento che sicuramente sarà stato trattato più volte ma aimè non sono riuscito a trovare qualcosa che fa al caso mio..
Il mio problema è questo:
ho una tabella di nome Tab_eventi formata dai campi Id,Cod_cli,Tipo_Evento,Stato,DataIns,DataMod. Io ho la necesstita di selezionare tutti i campi di questa tabella prendendo solo l'ultimo evento di ogni cliente. Quindi avevo pensato di fare una
select * from tab_eventi order by Cod_cli, DataMod...
Il problema sta nel fatto che devo selezionare un record per ogni cliente quindi avevo pensato alla select distinct cod_cli ma allo stessto tempo nel result set mi servono tutti gli altri campi della tabella tab eventi.......
Onestamente so che la soluzioni per molti di voi sarà banale ma non so prorpio come fare......
Spero di essere stato chiaro nell'esposizione del problema. Ringrazio in anticipo tutti coloro mi vorranno dare una mano
Ciao

Francesco Laliscia
>>Domandare è lecito,rispondere è cortesia
http://www.ciccios100.netsons.org/

Jok83 Profilo | Junior Member

Ciao, il campo ID come lo hai impostato nella tabella?

Se l'id dell'ultimo evento è il più alto ed è un integer puoi prendere quello più alto e prendere i campi da questo cos':

Select Id,Cod_cli,Tipo_Evento,Stato,DataIns,DataMod from Tab_eventi where id IN (Select Max(id) from Tab_eventi group by cod_cli)




ciccios100 Profilo | Junior Member

>Ciao, il campo ID come lo hai impostato nella tabella?

Ciao Jok,
per prima cosa vorrei ringraziarti dell'attenzione e scusarmi se non ho potuto risponderti prima....

>Se l'id dell'ultimo evento è il più alto ed è un integer puoi prendere quello più alto e prendere i campi da questo cos':
>Select Id,Cod_cli,Tipo_Evento,Stato,DataIns,DataMod from Tab_eventi
>where id IN (Select Max(id) from Tab_eventi group by cod_cli)

Avevo pensato a una soluzione simile ma il mio problema è che il campo DataIns non è proprio la data in cui inserisco l'evento nel mio db ma è una data che posso scegliere da applicativo tramite un calendario. Questo perchè in realtà nel mio programma ho la possibilità di registrare degli eventi che sono già avvenuti. Ti faccio un esempio:
Oggi alle 17.30 vado da un cliente a ritirare un Pc, domani rientrando in ufficio registrerò con data 22/06/2009 l'evento....
spero di aver spiegato meglio la mia situazione... non c'è un equivalente della funzione Max da poter utilizzare sui campi data???
Grazie mille

Francesco Laliscia
>>Domandare è lecito,rispondere è cortesia
http://www.ciccios100.netsons.org/

Jok83 Profilo | Junior Member

Si la max la puoi usare anche sui campi data ti ritorna la più recente, però prendi l'sempio e poni di avere un altro pc ritirato nello stesso giorno (cioè con la stassa datains) e avrai due righe di dettaglio dalla query , se potessi fare con l'index saresti più preciso secondo me...cmq la max funziona sulle date vai tranquillo.

ciccios100 Profilo | Junior Member

>Si la max la puoi usare anche sui campi data ti ritorna la più
>recente, però prendi l'sempio e poni di avere un altro pc ritirato
>nello stesso giorno (cioè con la stassa datains) e avrai due
>righe di dettaglio dalla query , se potessi fare con l'index
>saresti più preciso secondo me...

Giusto, caso raro ma effettivamente possibile....non ci avevo pensato

>cmq la max funziona sulle date vai tranquillo.

Scusa...avevo sbagliato la query....corretta ora la query funziona.....controllo i risultati e ti faccio sapere

Francesco Laliscia
>>Domandare è lecito,rispondere è cortesia
http://www.ciccios100.netsons.org/

Jok83 Profilo | Junior Member

Si probabilmetente è dovuto al tipo di dati prova così:
max(cast(Datains as date))


il campo ID di che tipo è? come lo valorizzi?

ciccios100 Profilo | Junior Member

Ciao Jok,
grazie mille per l'aiuo....alla fine ho risolto, anche se la query era un pò più complicata di come l'avevamo pensata all'inizio semplicemente perchè capita che ho più eventi in una giornata legati a diverse persone. Mettimo il caso che il 20/06/09 ho 2 eventi, uno legato al cliente A e l'altro al cliente B e il 21/06/09 ho un altro evento legato al cliente B la query che postata in precedenza dava come risultati tutti e tre gli eventi mentre avrebbe dovuto darmi solo due righe quella del 20 per il cliente A e quella del 21 per il cliente B....comunque ho risolto facendo una prima query che mi tira fuori l'Id delle righe e le date dell'ultimo evento per il cliente:
Select Max([DataMod]) as Data
, [Cod_cli]
,Max([app_ID]) as MaxId
Into #Temp
FROM [CRM].[dbo].[Tab_Eventi]
WHERE Tipo_Evento='006'
group by [Cod_cli]
come si può vedere il result set di questa query l'ho inserito in una tabella temporanea e poi ho fatto una join tra la tabella temporanea e la mia tab_eventi per il codice....comunque grazie mille il tuo suggerimento è stato davvero utlie
Francesco Laliscia
>>Domandare è lecito,rispondere è cortesia
http://www.ciccios100.netsons.org/

Jok83 Profilo | Junior Member

Ciao Francesco
>Mettimo il caso che il 20/06/09 ho 2 eventi, uno legato al cliente A e l'altro al cliente B e il 21/06/09 ho un altro evento legato al cliente B la query che postata in precedenza >dava come risultati tutti e tre gli eventi mentre avrebbe dovuto darmi solo due righe quella del 20 per il cliente A e quella del 21 per il cliente B....comunque ho risolto facendo >una prima query che mi tira fuori l'Id delle righe e le date dell'ultimo evento per il cliente:
>Select Max([DataMod]) as Data
>, [Cod_cli]
>,Max([app_ID]) as MaxId
>Into #Temp
>FROM [CRM].[dbo].[Tab_Eventi]
>WHERE Tipo_Evento='006'
>group by [Cod_cli]

eh non avevo pensato questo caso, ok mi resta una curiosità così a naso se raggruppi per cod_cli,datains ti dà lo stesso risultato e eviti la tabella temporanea però non l' ho provata : Select Id,Cod_cli,Tipo_Evento,Stato,DataIns,DataMod from Tab_eventi where id IN (Select Max(id) from Tab_eventi group by cod_cli,datains)

>comunque grazie mille il tuo suggerimento è stato davvero utlie.
Niente figurati...

ciccios100 Profilo | Junior Member

>eh non avevo pensato questo caso, ok mi resta una curiosità così
>a naso se raggruppi per cod_cli,datains ti dà lo stesso risultato
>e eviti la tabella temporanea però non l' ho provata :
>Select Id,Cod_cli,Tipo_Evento,Stato,DataIns,DataMod from Tab_eventi
>where id IN (Select Max(id) from Tab_eventi group by cod_cli,datains)
>
Ti posso dare la conferma al 100% domani mattina quando rientro in ufficio, comunque una select del genere secondo me nn va....
sarebbe giusta se a ID più grande corrispondesse la data più recente ma nel mio caso non è sempre così.....comunque provo e ti faccio sapere
Ciao e buona serata
Francesco Laliscia
>>Domandare è lecito,rispondere è cortesia
http://www.ciccios100.netsons.org/
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5