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 -