Search Postgresql Archives

Re: Help with join syntax sought

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Andy Colson wrote:
James B. Byrne wrote:
I have a requirement to select the effective exchange rate for a
number of currencies as of a specific date and time.  The rates may
come from several sources for the same currency.  For some
currencies the rate may be set infrequently.  I have come close to
getting this to work but cannot seem to get the last bit figured
out.  Thus my appeal for help.


Here is what I have so far:

SELECT
        fxr.currency_code_base      AS fx_base,
        fxr.currency_code_quote     AS fx_quote,
        fxr.effective_from          AS fx_date,
        fxr.currency_exchange_type  AS fx_type,
        fxr.currency_exchange_rate  AS fx_rate

FROM
        currency_exchange_rates AS fxr

LEFT OUTER JOIN
        currency_exchange_rates AS fxr_j

ON
        fxr.currency_code_base     =  fxr_j.currency_code_base
  AND
        fxr.currency_code_quote    =  fxr_j.currency_code_quote
  AND
        fxr.currency_exchange_type =  fxr_j.currency_exchange_type
  AND
        fxr.effective_from         >= fxr_j.effective_from

WHERE
        fxr.currency_code_base  =   'CAD'
  AND
        fxr.effective_from      <=  current_timestamp

GROUP BY
        fx_base,
        fxr.currency_code_quote,
        fx_date,
        fxr.currency_exchange_type,
        fx_rate

HAVING
        COUNT(fxr.currency_code_quote)  = 1

ORDER BY
        fx_base,
        fxr.currency_code_quote,
        fx_date DESC



I see currency_code_base = 'CAD', so you are looking for the most recent Canadian exchange rate.


 > The rates may
 > come from several sources for the same currency.

What field is the source? currency_code_quote?

-Andy

Hum... I can quite figure what we are looking for.

you say: currencies as of a specific date and time
but there is not date stuff in the where... so we'll ignore that.

you say: come from several sources
but doesnt seem important, we'll ignore that.

you say: I want only the most recent regardless of type
so type is unimporttant

How about this:

select * from fxr where code_base = 'CAD' and effective_from = (select max(effective_from) from fxr f2 where f2.code_base=fxr.code_base and f2.code_quote=fxr.code_quote);


(forgive the shortened names), it selects any 'CAD' of only the most recent time, based on code_base and code_quote. (had to guess at the fields)


Oh! I see one problem.. if the effective_from is exactly the same it could return more records than you want. Have to think about that...

-Andy

--
Sent via pgsql-general mailing list (pgsql-general@xxxxxxxxxxxxxx)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux