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

Откуда:
Сообщений: 1169
Что-то переклинило совсем, есть таблица Товары {Код, Наименование},
есть таблица История цен {Код, Дата, Товар, Цена, Наценка}
Мне нужно получить одним запросом сводную таблицу, в которой будет Код, Наименование, Цена, Наценка
Таблица должна получаться на определенную дату. В таблице история цен данные выглядят так:
1,01.01.2013,10,5
1,01.05.2013,11,6
2,01.01.2013,12,8
и т.д.
Помогите допереть, вызов функций использовать не хочется
5 фев 13, 12:46    [13877065]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Добрый Э - Эх
Guest
банальный джойн двух таблиц, с последующей фильтрацией по дате и выборкой последней стоимости, у которой дата, не больше заданной. В чем именно сложности?
5 фев 13, 12:50    [13877096]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
izoldov-roskini
Member

Откуда:
Сообщений: 1169
Добрый Э - Эх
банальный джойн двух таблиц, с последующей фильтрацией по дате и выборкой последней стоимости, у которой дата, не больше заданной. В чем именно сложности?

Если бы все так просто было, не спрашивал бы, для каждого товара записей в истории несколько, причем если цена последняя на 04.01.2013 то на дату 10.01.2013 должна светиться она
5 фев 13, 13:00    [13877168]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Добрый Э - Эх
Guest
izoldov-roskini,

ещё раз:
1) Джойним таблицы как есть
2) Накладываем условие по дате ([История цен].[дата] <= <определенная дата>)
3) Делаем TOP 1 with ties с сортировкой по дате в обратном порядке.
4) Мыслим в сторону объединения условий соединения и фильтрации по дате (хотя, тут оптимизатор, скорее всего, сделает ЭТО лучше, чем ты)

Что именно сложно или не получается? Как пробовал?
5 фев 13, 13:09    [13877240]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
aleks2
Guest
izoldov-roskini
Добрый Э - Эх
банальный джойн двух таблиц, с последующей фильтрацией по дате и выборкой последней стоимости, у которой дата, не больше заданной. В чем именно сложности?

Если бы все так просто было, не спрашивал бы, для каждого товара записей в истории несколько, причем если цена последняя на 04.01.2013 то на дату 10.01.2013 должна светиться она


1. О, блин, какие сложности!
2. Я те, страдалец, наставлю на путь истинный.
3. В таблице истории должна быть не дата, а ДВЕ: начало и кончало.
4. Кончало заполняешь запросом. Ну и обновляешь по необходимости или триггером.
5. Дальше - простой join.
6. Да, кончало последней цены заполняешь чем-нибудь перспективным, ну типо 6000г.
5 фев 13, 13:11    [13877258]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
izoldov-roskini
Member

Откуда:
Сообщений: 1169
Все красиво описано тут: https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=9329&msg=36159
5 фев 13, 13:13    [13877300]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3265
izoldov-roskini
Добрый Э - Эх
банальный джойн двух таблиц, с последующей фильтрацией по дате и выборкой последней стоимости, у которой дата, не больше заданной. В чем именно сложности?

Если бы все так просто было, не спрашивал бы, для каждого товара записей в истории несколько, причем если цена последняя на 04.01.2013 то на дату 10.01.2013 должна светиться она

Где светиться ?

DECLARE @T TABLE (Id int , DateOfChange DATETIME, Amount DECIMAL(18,2) )


INSERT @T (Id, DateOfChange , Amount ) VALUES (  1,'20130101' , 1.0 ) 
INSERT @T (Id, DateOfChange , Amount ) VALUES (  1,'20130102' , 2.0 ) 
INSERT @T (Id, DateOfChange , Amount ) VALUES (  2,'20130101' , 3.0 ) 
INSERT @T (Id, DateOfChange , Amount ) VALUES (  2,'20130102' , 4.0 ) 


DECLARE @DATE DATETIME
SET @DATE = '20130102'

SELECT TOP 1 WITH TIES 
 Id
 ,DateOfChange 
 ,Amount 
FROM @T T
WHERE DateOfChange  <= @DATE
ORDER BY ROW_NUMBER() OVER (PARTITION BY Id ORDER BY DateOfChange DESC)


Это ?
5 фев 13, 13:14    [13877309]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
aleks2
Guest
izoldov-roskini
Все красиво описано тут: https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=9329&msg=36159

Дуракофф всегда привлекали фантики.
5 фев 13, 13:15    [13877320]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Добрый Э - Эх
Guest
izoldov-roskini
Все красиво описано тут: https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=9329&msg=36159
не очень красиво, но максимально подробно решение поставленной задачи рассматривается тут ;)
5 фев 13, 13:16    [13877328]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить