#mysql #sql
Нужно вывести item_id и price_in_rub. Price_in_rub – стоимость rub, считается как
price из таблицы items умноженная на курс валюты на максимальную дату выставления курса
из таблицы rates.
Выглядит все это примерно так:
Например: item_id=5 price = 20 EUR, в таблице rates максимальная дата выставления
курса евро – 13 января, на эту дату курс равнялся 3,0. Итого price_in_rub 20*3,0 = 60.
items
item_id |price | currency
1 |100 | USD
2 |10 | EUR
3 |20 | USD
4 |40 | USD
5 |20 | EUR
7 |400 | USD
rates
currency| date | rate
USD | 10.01.2017| 1,0
USD | 11.01.2017| 1,5
USD | 12.01.2017| 2,0
EUR | 13.01.2917| 3,0
EUR | 12.01.2017| 2,5
Ответы
Ответ 1
Решение с корелированым подзапросом: SELECT itm.item_id ,(itm.price * cur.rate) price_in_rub FROM items itm CROSS APPLY ( SELECT TOP 1 rate FROM rates WHERE itm.currency = rates.currency ORDER BY date desc ) curОтвет 2
Вот такой вариант по быстрее будет: SELECT it.item_id, it.price*r.rate AS price_in_rub FROM dbo.items AS it JOIN dbo.rates AS r ON it.currency = r.currency WHERE r.date = (SELECT MAX(date) FROM dbo.rates AS r2 WHERE r.currency = r2.currency)
Комментариев нет:
Отправить комментарий