Stampa
Categoria: SQL
Visite: 15671
Stella inattivaStella inattivaStella inattivaStella inattivaStella inattiva
 

Anni fa ho avuto l'esigenza di dover cercare un cambio tramite una select sul DB2/400 ed ho avuto la fortuna di trovare un post su un newsgroup contenente la select che faceva al caso mio. Oggi mi si è riproposta la necessità ed ho pensato di condividerla.

La select cerca il cambio ad una certa data e per una certa di divisa. Sin qui niente di speciale. Ma considerando che i cambi non coprono tutti i 365 giorni dell'anno, se la nostra data cambio fa riferimento ad un sabato o una domenica, la select dovrà ritornare il cambio del giono precedente.

Ecco la select che ho trovato, ne approfitto per ringraziare l'autore che purtroppo non conosco.

1
2
3
4
5
6
7
8
9
10
11
12
13
/* Cerca il cambio alla data specificata e se non trovato ritorna quello del giorno precedente */
SELECT A.CDVAL, A.CAMBI, A.DTVAL                                            
FROM ANVA200F AS A 
	INNER JOIN
	 ( SELECT B.CDVAL, Max(B.DTVAL) AS MaxDiDTVAL        
           FROM  ANVA200F AS B                     
           WHERE   (B.DTVAL<>99999999 AND B.DTVAL<>0           
          	   AND  b.DTVAL <= 20100929)                       
           GROUP BY B.CDVAL ) AS MaxDataCambio                                
     ON	 (A.DTVAL = MaxDataCambio.MaxDiDTVAL)                                
     AND (A.CDVAL = MaxDataCambio.CDVAL)                                    
     AND  A.CDVAL = 'US' AND A.DTVAL<>0 AND A.DTVAL<>99999999
 

 

La suddetta select cerca il cambio US alla data del 29 settembre 2010, ma essendo domenica ritornerà il cambio di venerdì 27.

 

- have fun - 

DISQUS - Leave your comments here