Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
SQL Server 2000/2005/2008, Express, Access, MySQL, Oracle
Selezionare le righe nella mia tabella (con i relativi campi) controll...
venerdì 19 giugno 2009 - 12.07
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
ciccios100
Profilo
| Junior Member
167
messaggi | Data Invio:
ven 19 giu 2009 - 12:07
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
139
messaggi | Data Invio:
ven 19 giu 2009 - 14:52
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
167
messaggi | Data Invio:
lun 22 giu 2009 - 09:04
>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
139
messaggi | Data Invio:
lun 22 giu 2009 - 09:11
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
167
messaggi | Data Invio:
lun 22 giu 2009 - 09:23
>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
139
messaggi | Data Invio:
lun 22 giu 2009 - 09:32
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
167
messaggi | Data Invio:
mer 24 giu 2009 - 15:35
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
139
messaggi | Data Invio:
mer 24 giu 2009 - 16:31
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
167
messaggi | Data Invio:
mer 24 giu 2009 - 18:40
>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/
Torna su
Stanze Forum
Elenco Threads
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 !