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

Откуда:
Сообщений: 22
Всем привет.
Прошу помощи в решении, казалось бы, простой задачи.

Есть две таблицы:
Продажи (Дата продажи, Сумма)
Курс (Дата курса, Курс)

Нужно их заджоинить так, что бы каждой дате продажи соответствовал свой курс.

Проблема в том, что Курс не всегда установлен в дату продажи (могут брать курс который был установлен вчера или позавчера).

Мой запрос работает не правильно.
Помогите плзз.


select
cast([Продажа].[Дата продажи] as date) as 'Дата продажи',
[Продажа].[Сумма],
[Курс].[Курс]

from [Продажа]

left join [Курс] on cast([Продажа].[Дата продажи] as date) = (SELECT max(cast([Курс].[Дата курса] as date)) as MaxDate 
                                                                                            FROM [Курс]
                                                                                            WHERE cast([Продажа].[Дата продажи] as date) >= cast([Курс].[Дата курса] as date) 
                                                                                            )


Сообщение было отредактировано: 3 авг 18, 18:57
3 авг 18, 15:03    [21628575]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с простой задачкой плзззз!  [new]
Pallich
Member

Откуда:
Сообщений: 22
БД: Microsoft SQL Server 2016 (SP1) - 13.0.4001.0
3 авг 18, 15:11    [21628602]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с простой задачкой плзззз!  [new]
Шыфл
Member

Откуда: Прага
Сообщений: 774
Pallich, помню в молодости тоже решал эту задачу :)

select 
cast([Продажа].[Дата продажи] as date) as 'Дата продажи',
[Продажа].[Сумма],
[LastKurs].[Курс]
from [Продажа]
outer apply 
(
select top 1 [Курс].[Курс] 
    from [Курс] 
where cast([Курс].[Дата курса] as date)<=cast([Продажа].[Дата продажи] as date)
order by [Курс].[Дата курса] desc
) LastKurs
3 авг 18, 15:13    [21628606]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с простой задачкой плзззз!  [new]
msLex
Member

Откуда:
Сообщений: 7730
select *
from Продажи п
outer apply (
   select top 1 *
from Курс к
where 
k.date <= п.date
order by 
k.date desc
) k


что делать с продажами без курса, разбирайтесь сами

Сообщение было отредактировано: 3 авг 18, 15:21
3 авг 18, 15:15    [21628610]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с простой задачкой плзззз!  [new]
Pallich
Member

Откуда:
Сообщений: 22
Шыфл и msLex Большое вам человеческое спасибо! :)
3 авг 18, 15:38    [21628701]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить