[Chiuso] Select greatest date and assign a Status

Stato
Chiusa ad ulteriori risposte.

Salva90

Utente junior
10 Settembre 2018
37
8
Office 2015
2
ciao a tutti,
ho una tabella con campo ID e una serie di campi data: DATA_APERTURA, DATA_CHIUSURA, DATA_ESTINZIONE e DATA_BLOCCO
Tutte le date, eccetto DATA_APERTURA, sono annullabili.
Devo scrivere una query che, per ogni ID, selezioni la GREATEST tra queste date e attribuisca a quel record uno STATUS (ad es. AP se DATA_APERTURA è la data maggiore, BL se DATA_BLOCCO è la data maggiore ecc.)
Vi allego un excel con la situazione attuale e l'output desiderato

Grazie in anticipo a chiunque voglia darmi una mano.
 

Allegati

giulianovac

Access/VBA Expert
Staff
9 Giugno 2018
4.027
145
Italy
2019
306
Potresti provare ad usare un SELECT CASE oppure IIF, annidati, per confrontare i tre campi DATA e quando ottiene la data maggiore la scrive in DataMax ed allo stesso tempo scrive i primi caratteri del campo corrispondente (AP, ES, CH, BL) nel campo Status.
Fai una prova...
 
Ultima modifica:

Salva90

Utente junior
10 Settembre 2018
37
8
Office 2015
2
Potresti provare ad usare un SELECT CASE oppure IIF, annidati, per confrontare i tre campi DATA e quando ottiene la data maggiore la scrive in DataMax ed allo stesso tempo scrive i primi caratteri del campo corrispondente (AP, ES, CH, BL) nel campo Status.
Fai una prova...
Ciao Giuliano e grazie mille per il suggerimento.
Stavo provando proprio la strada del CASE WHEN...ELSE ma la mia difficoltà sta nel scriverlo all'interno della stessa query che seleziona la data maggiore...
 

giulianovac

Access/VBA Expert
Staff
9 Giugno 2018
4.027
145
Italy
2019
306
ma la mia difficoltà sta nel scriverlo all'interno della stessa query
Forse con la IIF è più immediato.
Ti ho buttato giù qualcosa di parziale, da completare ma la strada mi sembra valga la pena:

Visual Basic:
SELECT ID, data_apertura
  , IIF(data_chiusura IS NULL AND data_chiusura IS NULL AND data_estinzione IS NULL AND data_blocco IS NULL, data_apertura,
    IIF(data_chiusura > data_estinzione , data_chiusura,  data_estinzione)) AS MaxData
  , IIF(data_chiusura IS NULL AND data_chiusura IS NULL AND data_estinzione IS NULL AND data_blocco IS NULL, 'AP', NULL)  AS Status
FROM test
Visual Basic:
ID   data_apertura  MaxData     Status 
1    01/01/2020    01/01/2020    AP 
2    10/07/2019    01/01/2020     
3    01/01/2020    01/01/2020    AP 
4    01/01/2009    10/10/2020     
5    01/01/2019    01/01/2019    AP 
6    01/10/2019    06/04/2020
Altrimenti devi crearti un funzione scalare che trovi la MaxData per ogni record.
 
Ultima modifica:
Stato
Chiusa ad ulteriori risposte.

Sostieni ForumExcel

Aiutaci a sostenere le spese e a mantenere online la community attraverso una libera donazione!