Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Не выкупаю, нужна помощь с запросом  [new]
Максимов
Member

Откуда:
Сообщений: 2
Много уважаемые форумчане, нужна помощь новичку в этом деле!
Есть две таблицы: tabl1 [data, sum_rub] и tabl2:[data,rate_usd]
Какой будет sql запрос, что бы переводил сумму транзакций в usd (sum_rub) с учетом того, что в таблице tabl2 данные только за рабочие дни. В tabl1 дата транзакции совершена в выходной день. Транзакции(sum_rub), совершенные в выходные, пересчитываются по курсу последнего рабочего дня перед выходным. Нужно: сумма операций в usd.


Не понимаю как сделать что бы data из tabl1 ссылалась на data из tabl2, что бы из поля rate_usd выбрать значения последнего рабочего дня и поделить sum_rub.
Нужно ли использовать DATEPART, и как вообще будет выглядеть код?
Или нужно добавить в tabl2 записи для выходных дней, но как это сделать?
16 дек 18, 21:20    [21765527]     Ответить | Цитировать Сообщить модератору
 Re: Не выкупаю, нужна помощь с запросом  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30775
Максимов,

select tabl1.data, tabl1.sum_rub*tabl2.rate_usd, 
from tabl1
	outer apply (
		select top 1 tabl2.rate_usd
		from tabl2
		where tabl2.data < tabl1.data
		order by tabl2.data desc
		) tabl2
16 дек 18, 21:48    [21765536]     Ответить | Цитировать Сообщить модератору
 Re: Не выкупаю, нужна помощь с запросом  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30775
alexeyvg
where tabl2.data < tabl1.data
Ой, конечно, tabl2.data <= tabl1.data
16 дек 18, 21:49    [21765538]     Ответить | Цитировать Сообщить модератору
 Re: Не выкупаю, нужна помощь с запросом  [new]
Максимов
Member

Откуда:
Сообщений: 2
alexeyvg,
Вау! супер, все работает, только надо было поделить(tabl1.sum_rub/tabl2.rate_usd), но не суть. Благодарю Вас.
Пытался проделать это же с помощью JOIN но получилось что tabl1.sum_rub перемножается с каждой строкой tabl2.rate_usd...(
17 дек 18, 00:15    [21765589]     Ответить | Цитировать Сообщить модератору
 Re: Не выкупаю, нужна помощь с запросом  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30775
Максимов
Пытался проделать это же с помощью JOIN но получилось что tabl1.sum_rub перемножается с каждой строкой tabl2.rate_usd...(
Перемножается - это потому, что вы не связали строки по дате. А связать их сложно, потому что нужно связывать "с последней существующей до указанной", сделать же это для простого JOIN сложно, разве что написать несколько JOIN, что будет неоптимально.

Или можно сделать JOIN, пронумеровать записи, и выбрать первые, но так будет более громоздко, и может быть не так оптимально.
select data, sum_usd
from(
	select tabl1.data, tabl1.sum_rub/tabl2.rate_usd as sum_usd, ROW_NUMBER() over (partition by tabl1.data order by tabl2.data desc) as row_num
	from tabl1
		join tabl2
			on tabl2.data <= tabl1.data
) t 
where row_num = 1

Так что по сути я и сделал JOIN, только другой его вид (outer apply), который более гибкий.
17 дек 18, 11:50    [21765761]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить