#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)
Комментариев нет:
Отправить комментарий