我目前正在预测从仓库到各个商店的物品需求。但是为了进行预测,从仓库到各自的商店,每种产品至少需要有2个时间序列。
目前,我是这样工作的:
SELECT t.date,t.Qty,t.ItemID,t.Warehouse,t.Store
FROM(SELECT date,
Warehouse,
SUM(Qty),
ItemID,
Store,
Count (*) OVER (PARTITION BY ItemID,Warehouse,Store ) as cnt
FROM database
GROUP BY date,Warehouse,ItemID,Store)t
WHERE cnt >= 2
ORDER BY t.date DESC;
尽管如此,我使用的预测程序包还是存在错误,因为该数据框具有不到2个要预测的非NA值。这是处理先前df的代码的一部分。
d1 <- df %>%
nest(-`Warehouse`,-`ItemID`,-`Store`)%>%
mutate(m = map(data, prophet,algorithm='Newton')) %>%
mutate(future = map(m, make_future_dataframe,freq="week",periods=52)) %>%
mutate(forecast = map2(m, future, predict))
d <- d1 %>%
unnest(forecast) %>%
select(date,`Warehouse`, yhat,`ItemID`,`Store`)
答案 0 :(得分:0)
您的SQL错误-预测程序包必须将其隐藏。数量位于子查询select语句中,但不在group by子句中,并且不被视为汇总。您可能想对其求和,因此带有“数量”的行应为“总和(数量)为数量”。总查询为
SELECT t.date,t.Qty,t.ItemID,t.Warehouse,t.Store
FROM(SELECT date,
Warehouse,
SUM(Qty) as Qty,
ItemID,
Store,
Count (*) OVER (PARTITION BY ItemID,Warehouse,Store ) as cnt
FROM database
GROUP BY date,Warehouse,ItemID,Store)t
WHERE cnt >= 2
ORDER BY t.date DESC;
已更新以添加
此(固定)SQL仅返回任何项目/仓库/商店组合至少有两个记录的行。但是,它不是将它们一起返回-只是按日期排序。也许预测程序包期望一个特定组合的所有行都在一起?尝试将结尾处的ORDER BY行更改为
ORDER BY t.ItemID, t.Warehouse, t.Store, t.date DESC;
答案 1 :(得分:0)
请在您的分组依据子句中添加数量。
答案 2 :(得分:0)
您的意思是说Forecasting Package正在抛出验证消息。
在所有列上都已使用Count window function
时,不需要Group By
。
这里也有人,他们要么在Group By中包含了QTY,要么在QTY上使用了聚合函数。
主要错误不是因为这个。
如果有小错误,那么您可以纠正自己。
SELECT t.date,t.Qty,t.ItemID,t.Warehouse,t.Store
FROM(SELECT date,
Warehouse,
sum(Qty) Qty,
ItemID,
Store,
Count (*) as cnt
FROM database
GROUP BY date,Warehouse,ItemID,Store)t
WHERE cnt >= 2
ORDER BY t.date DESC;
或者您可能需要在计数中提到columname才能提供准确的计数。
Declare @t table(col int,col1 int)
insert into @t values(null,1),(1,2)
select count(*) from @t
or
select count(col) from @t