1K подписчиков
17 подписчиков
Поиск по дате на Oracle
Задача
Имеется таблица изменений курса валют T_CURRENCY:
CODE varchar2(32) Код валюты (USD, RUR, …)
DATE_C date Дата изменения курса
VALUE number Значение курса
Необходимо написать SQL запрос, с помощью которого можно получить значение курса для заданной валюты на заданную дату.
Решение
Создаю структуру
CREATE TABLE T_CURRENCY (
CODE VARCHAR2(32),
DATE_C DATE,
VALUE NUMBER
);
/
Наполняю структуру данными
INSERT INTO "T_CURRENCY" (CODE, DATE_C, VALUE) VALUES ('USD', TO_DATE('2019-08-13 16:00:00','YYYY-MM-DD HH24:MI:SS') , 64.760);
INSERT INTO "T_CURRENCY" (CODE, DATE_C, VALUE) VALUES ('USD', TO_DATE('2019-08-13 20:00:00','YYYY-MM-DD HH24:MI:SS') , 64.834);
INSERT INTO "T_CURRENCY" (CODE, DATE_C, VALUE) VALUES ('USD', TO_DATE('2019-08-14 08:00:00','YYYY-MM-DD HH24:MI:SS') , 65.209);
INSERT INTO "T_CURRENCY" (CODE, DATE_C, VALUE) VALUES ('USD', TO_DATE('2019-08-14 12:00:00','YYYY-MM-DD HH24:MI:SS') , 65.460);
COMMIT;
Проверяю выборку
SELECT CODE,
TO_CHAR(DATE_C, 'YYYY-MM-DD HH24:MI:SS') AS DATE_TIME,
VALUE
FROM T_CURRENCY;
Вижу
CODE DATE_TIME VALUE
USD 2019-08-13 16:00:00 64.76
USD 2019-08-13 20:00:00 64.834
USD 2019-08-14 08:00:00 65.209
USD 2019-08-14 12:00:00 65.46
Для того, чтобы найти курс на указанную дату и время (например, на 2019-08-14 09:45), воспользуемся следующим запросом с подзапросом:
SELECT CODE,
TO_CHAR(DATE_C, 'YYYY-MM-DD HH24:MI:SS') AS DATE_TIME,
VALUE FROM T_CURRENCY
WHERE CODE = 'USD'
AND DATE_C IN (
SELECT MAX(DATE_C)
FROM T_CURRENCY
WHERE DATE_C <= TO_DATE('2019-08-14 09:45:00','YYYY-MM-DD HH24:MI:SS')
);
Результат:
CODE DATE_TIME VALUE
USD 2019-08-14 08:00:00 65.209