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

Откуда: Москва
Сообщений: 566
Добрый день! Столкнулся со следующей проблемой. Есть таблица (пример таблицы на рис. Таблица 1), где на каждый день указны цены товаров в магазине (кол-во строк за один день порядка 500 000). Нужно создать таблицу в которой будут указаны периоды действия цен (Таблица 2)
тоесть нужно создать таблицу.
Магазин - Товар - ДатаДействияС - ДатаДействияПо - Цена

Есть у кого-нибудь идея, как это оптимальней сделать?

К сообщению приложен файл. Размер - 23Kb
6 июн 21, 14:37    [22331914]     Ответить | Цитировать Сообщить модератору
 Re: Создание таблицы с периодом действия цен (Price list)  [new]
court
Member

Откуда:
Сообщений: 2335
msleg,

поиск по "инвариант" на форуме
суть будет такая
with cte as (
select
    ...
    ,row_number()over(partition by Магазин, Товар order by Дата) 
        - row_number()over(partition by Магазин, Товар, Цена order by Дата) as inv
from ..
)
select 
    Магазин, Товар, Цена, min(Дата), max(Дата)
from cte
group by 
    Магазин, Товар, Цена, inv
6 июн 21, 15:16    [22331919]     Ответить | Цитировать Сообщить модератору
 Re: Создание таблицы с периодом действия цен (Price list)  [new]
aleks222
Member

Откуда:
Сообщений: 1416
court
msleg,

поиск по "инвариант" на форуме
суть будет такая
with cte as (
select
    ...
    ,row_number()over(partition by Магазин, Товар order by Дата) 
        - row_number()over(partition by Магазин, Товар, Цена order by Дата) as inv
from ..
)
select 
    Магазин, Товар, Цена, min(Дата), max(Дата)
from cte
group by 
    Магазин, Товар, Цена, inv

Это ж позор и профнепригодность.

LEAD/LAG спасет отца русской демократиии.
6 июн 21, 16:47    [22331935]     Ответить | Цитировать Сообщить модератору
 Re: Создание таблицы с периодом действия цен (Price list)  [new]
SERG1257
Member

Откуда:
Сообщений: 2864
msleg
Есть у кого-нибудь идея, как это оптимальней сделать?
Критерий оптимальности в студию
С двумя датами проще искать, но возможны как накладки (две цены на дату) так и разрывы
С одной датой это исключено, но запрос будет позаковыристее
6 июн 21, 17:00    [22331938]     Ответить | Цитировать Сообщить модератору
 Re: Создание таблицы с периодом действия цен (Price list)  [new]
msleg
Member

Откуда: Москва
Сообщений: 566
court,

Спасибо. Вроде все работает как надо

WITH CTE as
(
	SELECT 
		[IDShop]
		,[IDSku]
		,[Date]
		,[Price]
		,row_number() over (partition by [IDShop], [IDSku] order by [Date])
		- row_number() over (partition by [IDShop], [IDSku], [Price] order by [Date]) as inv
	FROM [dbo].[testPrice] (nolock)
)

SELECT 
	[IDShop]
	,[IDSku]
	,[Price]
	,min(Date) as DateStart
	,max(date) as DateEnd
FROM CTE
GROUP BY 
	[IDShop]
	,[IDSku]
	,[Price]
	,inv
6 июн 21, 23:00    [22332039]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить