Проблема с максимальной датой хранимой процедуры SQL

У меня проблема с получением MAX DATE из хранимой процедуры.

По сути, у меня есть список обменных курсов с датой захвата, которые ежедневно фиксируются в таблице, и я хочу вернуть последнее значение.

Вот код, над которым я работаю..

select  
distinct t.source_currency_code, t.target_currency_code,
'(' + t.source_currency_code + ') '  + s.currency_name as source_currency_name, 
'(' + t.target_currency_code + ') '  + x.currency_name as target_currency_name,
t.converted_amount as buy_rate,
t.date_loaded as date_loaded

from texchange_rate t, tcurrency s, tcurrency x

where 
s.currency_code = t.source_currency_code and 
x.currency_code = t.target_currency_code

order by  t.source_currency_code

Я думал, что MAX (.t.date_loaded сгруппирован по валютному_коду), но это не работает...

Любая помощь приветствуется!


person Rexxo    schedule 23.02.2012    source источник
comment
Какую СУБД (SQLServer, Oracle, MySQL и т. д.) вы используете?   -  person    schedule 23.02.2012


Ответы (2)


Пытаться:

select * from 
(select t.source_currency_code, 
        t.target_currency_code,
        '('+t.source_currency_code+') '  + s.currency_name as source_currency_name, 
        '('+t.target_currency_code+') '  + x.currency_name as target_currency_name,
        t.converted_amount as buy_rate,
        t.date_loaded as date_loaded,
        rank() over (partition by t.source_currency_code, 
                                  t.target_currency_code 
                     order by t.date_loaded desc) rn
 from texchange_rate t
 join tcurrency s on s.currency_code = t.source_currency_code 
 join tcurrency x on x.currency_code = t.target_currency_code) v
where rn = 1
order by source_currency_code, target_currency_code
person Community    schedule 23.02.2012

Я думаю, вам нужно иметь исходную и целевую валюту в качестве элементов для поиска вашего последнего курса покупки.

ты мог бы смириться с этим?

 SELECT
t.source_currency_code, t.target_currency_code,
'(' + t.source_currency_code + ') '  + s.currency_name as source_currency_name, 
'(' + t.target_currency_code + ') '  + x.currency_name as target_currency_name,
t.converted_amount as buy_rate,
t.date_loaded as date_loaded
FROM 
texchange_rate t
INNER JOIN tcurrency s
ON t.source_currency_code = s.currency_code
INNER JOIN tcurrency x
ON t.target_currency_code = x.currency_code
WHERE t.date_loaded in 
      (
          SELECT max(date_loaded) from texchange_rate tt
          where t.source_currency_code = tt.source_currency_code
          and t.target_currency_code = tt.target_currency_code
      )
order by date_loaded desc

ОБНОВЛЕНИЕ удалить отдельные и сгруппировать по коду валюты, я думаю, что порядок по date_loaded даст вам последние значения, не уверенные, что это то, что вы хотите.

person Turbot    schedule 23.02.2012
comment
Хм, попробуй. Получение ошибки Столбец 'texchange_rate.target_currency_code' недействителен в списке выбора, поскольку он не содержится ни в агрегатной функции, ни в предложении GROUP BY. - person Rexxo; 23.02.2012
comment
Запрос WHERE сработал, я не могу опубликовать свой ответ еще 7 часов! :( Большое спасибо за вашу помощь. - person Rexxo; 23.02.2012