Переслано от
Андрей РыжикДобрый день, коллеги. Реализовываю классификацию товаров на новинки по следующей схеме: если товара 6 недель подряд не было на остатках (остаток=0), а потом он появился, то последующие 14 дней он будет считаться новинкой. Но эти 14 дней должны начать отсчитываться ровно с того момента, как остаток товара стал ненулевым после шестинедельного отсутствия. Никто не сталкивался с такой задачей? Или может мысли какие есть?
set vNewStart=2; //Через сколько дней отсутствия товар будет новинкой
set vNewStop=1; //Сколько дней присутствия товар будет новинкой
Остатки:
load * inline [
Товар, Дата, Остаток
t1,1,3
t1,2,3
t1,3,0
t1,4,3
t1,5,0
t1,6,0
t1,7,1
t1,8,2
t1,9,0
t1,10,0
t1,11,0
t1,12,0
t1,13,3
t1,14,3
t1,15,3
t1,16,3
t1,17,3
t2,1,3
t2,2,3
t2,3,0
t2,4,3
t2,5,0
t2,6,0
t2,7,1
t2,8,2
t2,9,0
t2,10,0
t2,11,0
t2,12,0
t2,13,1
t2,14,3
t2,15,3
t2,16,3
t2,17,3
];
СчетНовинок:
load *,
if(Присутствие<=$(vNewStop) and ПоследнееОтсутствие>=$(vNewStart) and Присутствие>0,1,0) as Новинка;
load*,
if(Previous(Товар)<>Товар,0,if(Отсутствие=0 and КонецОтсутствия=1,Previous(Отсутствие),Peek(ПоследнееОтсутствие))) as ПоследнееОтсутствие;
Load *,
if(Previous(Товар)<>Товар,1,if(Previous(Остаток)=0 and Остаток>0,1,0)) as КонецОтсутствия,
if(Previous(Товар)<>Товар,
if(Остаток=0,0,1),
if(Остаток>0,peek(Присутствие)+1,0)
) as Присутствие,
if(Previous(Товар)<>Товар,
if(Остаток=0,1,0),
if(Остаток=0,peek(Отсутствие)+1,0)
) as Отсутствие
Resident Остатки Order by Товар, Дата asc; drop Table Остатки;