Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用2个标准访问前N名的sql移动平均值_Sql_Ms Access - Fatal编程技术网

使用2个标准访问前N名的sql移动平均值

使用2个标准访问前N名的sql移动平均值,sql,ms-access,Sql,Ms Access,我一直在搜索论坛,在这里找到了一篇对我的问题略带微笑的帖子: 我的情况是: 我有一个表tblWEIGHT,包含:ID、日期、idPONR、重量 我还有第二个表tblSALES,其中包含:ID、日期、销售额、idPONR 我有第三个表tblPONR,其中包含:ID、PONR、idProduct 和第四个表TBL Product,包含:ID,Product 链接: tblWEIGHT.idPONR=tblPONR.ID tblSALES.idPONR=tblPONR.ID tblPONR.idPro

我一直在搜索论坛,在这里找到了一篇对我的问题略带微笑的帖子:

我的情况是:

我有一个表tblWEIGHT,包含:ID、日期、idPONR、重量 我还有第二个表tblSALES,其中包含:ID、日期、销售额、idPONR 我有第三个表tblPONR,其中包含:ID、PONR、idProduct 和第四个表TBL Product,包含:ID,Product 链接:

tblWEIGHT.idPONR=tblPONR.ID tblSALES.idPONR=tblPONR.ID tblPONR.idProduct=tblPRODUCT.ID 我的查询的主表是tblSALES。我想列出我所有的销售额,前五名的移动平均数 重量日期小于销售日期且产品与销售产品相同的产品重量。重要的是,结果不按日期分组。我需要所有TBL销售记录

我已经得到了前1名的权重,但我无法得到移动平均线。 排名前1位的查询如下所示,我猜我需要的查询将与之非常相似

SELECT tblSALES.ID, tblSALES.Dato, tblPONR.idPRODUCT, 
(
SELECT top 1 Weight FROM tblWEIGHT INNER JOIN tblPONR ON tblWeight.idPONR = tblPONR.ID
WHERE tblPONR.idPRODUCT = idPRODUCT AND 
SALES.Date > tblWEIGHT.Date 
ORDER BY tblWEIGHT.Date desc
) AS LatestWeight

FROM tblSALES INNER JOIN VtblPONR ON tblSALES.idPONR = tblPONR.ID 

这不是我确切的问题,因为我是丹麦人,我没有道理。我知道我不应该用Date作为字段名

我想filan的查询应该是这样的:

SELECT tblSALES.ID..... avg(SELECT TOP 5 weight .........)

但这样做,我不断得到错误,在最大1记录可以返回这个子查询

最后一个问题。 如果权重日期早于我销售产品的日期,我如何进行查询以创建我销售产品前5个权重的移动平均值

编辑样本数据: 日期格式:年月日

tblWEIGHT
ID      Date     idPONR    Weight
1    01-01-2020     1        100
2    02-01-2020     2        200
3    03-01-2020     3        200
4    04-01-2020     3        400
5    05-01-2020     2        250
6    06-01-2020     1        150
7    07-01-2020     2        200
预期结果请阅读AvgWeight的评论

tblSALES.ID  tblSALES.Date  tblSales.Sales(amt)  AvgWeigt
     1        05-01-2020           30              123  -->avg(top 5 newest weight of both idPONR 1 And 2 because they are the same product, and where tblWeight.Date<05-01-2020)
     2        06-01-2020           15              123  -->avg(top 5 newest weight of both idPONR 1 And 2 because they are the same product, and where tblWeight.Date<06-01-2020) 
     3        10-01-2020           20              123  -->avg(top 5 newest weight of idPONR 3 since thats the only idPONR with that product, and where tblWeight.Date<10-01-2020)
考虑:

问题1

SELECT tblWeight.ID AS WeightID, tblWeight.Date AS WtDate, 
tblWeight.idPONR, tblPONR.PONR, tblPONR.idProduct, tblWeight.Weight, tblSales.SalesAmt, 
tblSales.ID AS SalesID, tblSales.Date AS SalesDate
FROM (tblPONR INNER JOIN tblWeight ON tblPONR.ID = tblWeight.idPONR) 
INNER JOIN tblSales ON tblPONR.ID = tblSales.idPONR;
问题2

SELECT * FROM Query1 WHERE WeightID IN (
    SELECT TOP 5 WeightID FROM Query1 AS Dupe WHERE Dupe.idProduct = Query1.idProduct 
    AND Dupe.WtDate<Query1.SalesDate ORDER BY Dupe.WtDate);
问题3

SELECT Query2.SalesID, Query2.SalesDate, Query2.SalesAmt, 
First(DAvg("Weight","Query2","idProduct=" & [idProduct] & " AND WtDate<#" & [SalesDate] & "#")) AS AvgWt
FROM Query2
GROUP BY Query2.SalesID, Query2.SalesDate, Query2.SalesAmt;

请提供样本数据和预期结果。这比1000个字还重要。@GordonLinoff我刚刚更新了帖子,在我看来,AvgWeight在5/1/20应该是150,在6/1/20应该是550/3,在10/1应该是300/20@mazoula这里有数据是的。但要为我的数据创建一个真实的样本需要花费很长时间。因此,对于avgWeight,您必须阅读注释。
SELECT tblWeight.ID AS WeightID, tblWeight.Date AS WtDate, 
tblWeight.idPONR, tblPONR.PONR, tblPONR.idProduct, tblWeight.Weight, tblSales.SalesAmt, 
tblSales.ID AS SalesID, tblSales.Date AS SalesDate
FROM (tblPONR INNER JOIN tblWeight ON tblPONR.ID = tblWeight.idPONR) 
INNER JOIN tblSales ON tblPONR.ID = tblSales.idPONR;
SELECT * FROM Query1 WHERE WeightID IN (
    SELECT TOP 5 WeightID FROM Query1 AS Dupe WHERE Dupe.idProduct = Query1.idProduct 
    AND Dupe.WtDate<Query1.SalesDate ORDER BY Dupe.WtDate);
SELECT Query2.SalesID, Query2.SalesDate, Query2.SalesAmt, 
First(DAvg("Weight","Query2","idProduct=" & [idProduct] & " AND WtDate<#" & [SalesDate] & "#")) AS AvgWt
FROM Query2
GROUP BY Query2.SalesID, Query2.SalesDate, Query2.SalesAmt;