izoldov-roskini
Дата: 05.02.2013 12:46:44
Что-то переклинило совсем, есть таблица Товары {Код, Наименование},
есть таблица История цен {Код, Дата, Товар, Цена, Наценка}
Мне нужно получить одним запросом сводную таблицу, в которой будет Код, Наименование, Цена, Наценка
Таблица должна получаться на определенную дату. В таблице история цен данные выглядят так:
1,01.01.2013,10,5
1,01.05.2013,11,6
2,01.01.2013,12,8
и т.д.
Помогите допереть, вызов функций использовать не хочется
Добрый Э - Эх
Дата: 05.02.2013 12:50:23
банальный джойн двух таблиц, с последующей фильтрацией по дате и выборкой последней стоимости, у которой дата, не больше заданной. В чем именно сложности?
Добрый Э - Эх
Дата: 05.02.2013 13:09:19
izoldov-roskini,
ещё раз:
1) Джойним таблицы как есть
2) Накладываем условие по дате ([История цен].[дата] <= <определенная дата>)
3) Делаем TOP 1 with ties с сортировкой по дате в обратном порядке.
4) Мыслим в сторону объединения условий соединения и фильтрации по дате (хотя, тут оптимизатор, скорее всего, сделает ЭТО лучше, чем ты)
Что именно сложно или не получается? Как пробовал?
aleks2
Дата: 05.02.2013 13:11:14
izoldov-roskini |
---|
Добрый Э - Эх |
---|
банальный джойн двух таблиц, с последующей фильтрацией по дате и выборкой последней стоимости, у которой дата, не больше заданной. В чем именно сложности? |
Если бы все так просто было, не спрашивал бы, для каждого товара записей в истории несколько, причем если цена последняя на 04.01.2013 то на дату 10.01.2013 должна светиться она |
1. О, блин, какие сложности!
2. Я те, страдалец, наставлю на путь истинный.
3. В таблице истории должна быть не дата, а ДВЕ: начало и кончало.
4. Кончало заполняешь запросом. Ну и обновляешь по необходимости или триггером.
5. Дальше - простой join.
6. Да, кончало последней цены заполняешь чем-нибудь перспективным, ну типо 6000г.
Ken@t
Дата: 05.02.2013 13:14:37
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)
Это ?