Страницы

Поиск по вопросам

пятница, 3 января 2020 г.

Объединенный отчет из двух таблиц SQL

#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)

Комментариев нет:

Отправить комментарий