Как получить значение строки для максимума?

Rabbit from RU
Дата: 02.08.2005 13:27:29
Что-то никак не получается сообразить как правильно написать запрос. Необходимо, получить курс валюты на послденюю дату.

Пишу
select max(rate_date) from rates_cbrf 
   where rate_date<sysdate and id_currency_iso=840;

а как получить курс для полученной даты не соображу, кроме как подзапросом типа
select rate from rates_cbrf where rate_date= 
(select max...../здесь первый запрос/) and id_currency_iso=840;

Как правильно написать? Спасибо.
woltron
Дата: 02.08.2005 13:39:39
Rabbit from RU
Что-то никак не получается сообразить как правильно написать запрос. Необходимо, получить курс валюты на послденюю дату.

Пишу
select max(rate_date) from rates_cbrf 
   where rate_date<sysdate and id_currency_iso=840;

а как получить курс для полученной даты не соображу, кроме как подзапросом типа
select rate from rates_cbrf where rate_date= 
(select max...../здесь первый запрос/) and id_currency_iso=840;

Как правильно написать? Спасибо.


можно попробовать типа этого:
select 
 rate 
from 
 rates_cbrf 
where 
 id_currency_iso=840
 and rownumber=1
order by 
 rate_date desc

Vadim_Maximov
Дата: 02.08.2005 13:41:59
SELECT Rate 
FROM   (SELECT Rate,
               ROW_NUMBER() OVER(ORDER BY Rate_Date DESC) Q
        FROM   Rates_SBRF
        WHERE  ID_Currency_ISO = 840) Q
WHERE   Q.Q = 1
Vadim_Maximov
Дата: 02.08.2005 13:43:03
woltron
можно попробовать типа этого:
and rownumber=1
Это что за зверь такой?
Rabbit from RU
Дата: 02.08.2005 13:55:41

select 
 rate 
from 
 rates_cbrf 
where 
 id_currency_iso=840
 and rownum=1
order by 
 rate_date desc



Такой запрос возвращает одну запись, но не обязательно последнюю, т.к. order by выполняется уже на наборе записей (в данном случае =1 записи). Не работает.
alex-ls
Дата: 02.08.2005 14:01:51
and rownumber=1

select rate 
from 
 rates_cbrf 
where 
 id_currency_iso=840
 and rownum=1
order by 
 rate_date desc
Vadim_Maximov
Дата: 02.08.2005 14:03:40
Толку-то. Все равно работать не будет :)

2Rabbit from RU
Proteus
Дата: 02.08.2005 14:23:46
SELECT *
  FROM COM$CUR_RATES C
 WHERE C.CUR_RATE_DATE = (SELECT MAX(T.CUR_RATE_DATE)
                            FROM COM$CUR_RATES T
                           WHERE C.CR_TYPE_CODE = T.CR_TYPE_CODE
                           and c.cur_rate_date < '01-jan-2005')
   AND C.CR_TYPE_CODE = 2
Info2
Дата: 02.08.2005 15:10:28
Rabbit from RU
Что-то никак не получается сообразить как правильно написать запрос. Необходимо, получить курс валюты на послденюю дату.

Пишу
select max(rate_date) from rates_cbrf 
   where rate_date<sysdate and id_currency_iso=840;

а как получить курс для полученной даты не соображу, кроме как подзапросом типа
select rate from rates_cbrf where rate_date= 
(select max...../здесь первый запрос/) and id_currency_iso=840;

Как правильно написать? Спасибо.


select substr(max(rate_date||rate), 10) from rates_cbrf
where rate_date<sysdate and id_currency_iso=840;

но надо точно знать, сколько места занимает rate_date,
а лучше самому форматировать до нужной длины, а потом уже вырезать курс
1
Дата: 02.08.2005 15:13:00
select substr(max(to_number(to_char(p.rate_date,'yyyymmdd'))||p.rate),9)
from rates_cbrf p
where p.rate_date<sysdate and p.id_currency_iso=840