Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

SQL - Raggruppa evento x data maggiore.

Problemi di HTML? Di PHP, ASP, .NET, JSP, Perl, SQL, JavaScript, Visual Basic..?
Vuoi realizzare programmi in C, C++, Java, Ruby o Smalltalk, e non sai da che parte cominciare?
Entra qui e troverai le risposte!

Moderatori: archimede, Triumph Of Steel

SQL - Raggruppa evento x data maggiore.

Postdi albidibi » 12/09/18 11:32

Buongiorno a tutti,
scrivo per un esigenza informatica, su SQL.

Uso da poco SQL, anche se ho generato qualche query abbastanza elaborata, (ma col senno di poi, abbastanza ridicole)
ed ora che mi sto addentrando per lavoro, in situazioni più complesse, ho bisogno di un aiuto per capire alcuni concetti.

Il problema, sicuramente sarà stato trattando più volte in altri post, (ma faccio fatica a trovare quello calzante)
è quello legato al raggruppamento di un determinato evento, con diverse variabili, prendendo quello con la data maggiore.
Mi spiego meglio.

Innanzi tutto posto i dati, così come mi scendono, cercando un cliente specifico.
(la query poi dovrà girare considerando tutti i clienti in gestione)

Immagine

Descrizione dei campi:
ID Processo: identifica con un codice Alfa-Numerico, la riga dell'attività, ogni attività, anche se si ripete come nome, avrà un ID processo nuovo e differente.
Cod_Clt1 e Cod_Clt2: sono due codici identificativi del cliente.
Attività: Indica il tipo di operazione in corso.
Nell'esempio, l'Assegnazione della Squara,
l'assegnazione dell'auto,
e per ATT. Squadre, viene indicata l'attività di "attivazione" presso il cliente. (è proprio su questo campo che gira la mia ricerca)
Fornitore: & Squadra: sono due identificativi dell'azienda appaltata e della squadra che andrà dal cliente.
Data: la data di intervento presso il cliente.
Note1, & Note2: & Note3: potrebbero contenere o meno, delle note inserite dai tecnici,
alla chiusura dell'attività.

Nell'estrazione vedrete delle righe completamente duplicate, ma perchè ho rimosso delle colonne, che nn mi risulta esportare alla fine.

Siccome come si può vedere dall'estrazione, la stessa attività: ATT SQUADRE, potrebbe ripetersi + volte, a causa magari di uscite a vuoto, i dati che si vogliono raccogliere x l'analisi sono:

La nota1 più recente, la nota2 + recente, la nota3 + recente,
dell'attività + recente,
dell'attività: Att Squadre, raggruppato x ogni cliente in gestione,
quindi rimuovendo la ricerca sul codice 1231231, che ho usato x impostare la query.

Si vuole raccogliere questo dettaglio, per tutti i 300/400 clienti al giorno che hanno un attività aperta... quindi alla fine
ci vorrà un Group by, Cod_Clt1, o Cod_clt_2.


Credo, si debba far ricorso alle tabelle Temporanee, con delle subquery.. ma.. nonostante ci abbia provato in diversi modi,
arrivati ad un certo punto mi perdo completamente nelle sintassi e nei ragionamenti.

Mi date una mano?
Magari con un esempio x risolvere il problema nell'immediato, ma se possibile anche con una descrizione delle logiche che girano dietro le subquery..che a quanto pare, rendono SQL uno strumento potentissimo se le si sanno usare bene!


Grazie mille mille mille..
Albi

Attualmente la query che faccio girare fa un filtro su Max data

SELECT DISTINCT
tbl_Attività.ID_Processo,
tbl_AttivitàCod_Cliente_1,
tbl_Attività.Cod_Cliente_2,
tbl_Attività.Attività',
tbl_Attività.Fornitore',
tbl_Attività.Squadra',
max(tbl_Attività.Data),
tbl_Attività.Note1,
tbl_Attività.Note2',
tbl_Attività.Note3'
FROM
tbl_Attività
WHERE
tbl_Attività.Cod_Cliente_1 = "1231231"

ORDER BY
tbl_Attività.Data

ma la riga che mi compone, restituisce è la seguente:
Immagine

Immagine

Quindi, mi prende la data maggiore, ma le Note1 sono quelle del 28/06, e non quelle del 06/09,
le note2, sono blank e ok,
e le Note3, prende quelle del 28/06, e non quelle del 31-08-

HeLP!! :|
albidibi
Newbie
 
Post: 7
Iscritto il: 11/11/16 16:58

Sponsor
 

Postdi archimede » 14/09/18 12:52

Ho letto sommariamente il tuo post.

Intanto sarebbe bene specificare che db usi e la sua versione. Poi sconsiglio caldamente l'uso di caratteri speciali (lettere accentate, spazi, ecc.) per i nomi dei tuoi oggetti (campi, tabelle, ecc.).

Detto questo, supponendo che Cod_Cliente_1 sia l'identificativo univoco del cliente, Intanto potresti iniziare a provare una roba di questo tipo:
Codice: Seleziona tutto
select *
  from tbl_Attività
 where (Cod_Cliente_1, data) in (select Cod_Cliente_1, max(data) from tbl_Attività group by Cod_Cliente_1)
Il che però potrebbe non essere quello che vuoi (o sì, dipende dalle tue esigenze) se per lo stesso cliente puoi avere più records con la stessa data.

HTH.

Alessandro
archimede
Moderatore
 
Post: 2808
Iscritto il: 07/11/02 12:41
Località: Genova

Postdi albidibi » 17/09/18 09:39

Ciao Alessandro,
grazie per la risposta.. ora provo a spulciare ed applicare il tuo suggerimento..

Per completare le info:
- siamo sotto MySql, version: 5.6.17 (non so se è questo che intendevi però...)
- I caratteri speciali che ho messo nell'esempio, sono solo x l'esempio. X tutelare la privacy dei clt e della mia azienda, ho riadattato i dettagli. ;)
- Cod_Cliente_1 e Cod_Cliente_2, sono univoci del cliente, anche se il cod_cliete_2. potrebbe variare, casomai si rigenerasse un altra attività.. ma.. ci addentriamo nello specifico, e mi basta fare verifica codice x codice..

Provo.. ti faccio sapere.. grazie ancora! :)
albidibi
Newbie
 
Post: 7
Iscritto il: 11/11/16 16:58


Torna a Programmazione


Topic correlati a "SQL - Raggruppa evento x data maggiore.":


Chi c’è in linea

Visitano il forum: Nessuno e 3 ospiti