【发布时间】:2015-03-04 05:33:58
【问题描述】:
这是一个非常假设的示例,我将连接两个表(ORDERS 和 ORDHIST)。我正在使用 MS-ACCESS 2010。我正在尝试编写一个联接或子查询,这将返回两位销售人员在 DATE 前 2 个最近订单的平均值
订单
SalesPersonID OrderID 值
1 123 100
1 124 30
1 125 55
2 126 80
2 127 20
1 128 45
2 129 60
2 130 35
ORDHIST
OrderID 日期
123 22/03/2011
125 25/03/2011
127 29/03/2011
124 2011 年 3 月 24 日
126 26/03/2011
128 2011 年 3 月 30 日
129 2011 年 3 月 30 日
130 01/04/2011
我有 SQL 来列出按 SalesPersonID 和 Date 排序的记录:
SELECT Orders.SalesPersonID, Orders.OrderID, Orders.Value, OrdHist.Date
FROM Orders
INNER JOIN OrdHist ON Orders.OrderID = OrdHist.OrderID
ORDER BY Orders.SalesPersonID, OrdHist.Date DESC;
SalesPersonID OrderID 值日
1 128 45 30/03/2011
1 125 55 25/03/2011
1 124 30 24/03/2011
1 123 100 22/03/2011
2 130 35 01/04/2011
2 129 60 30/03/2011
2 127 20 29/03/2011
2 126 80 26/03/2011
所以我现在想为每个 SalesPerson 选择前两行,并只显示这两行的平均值来给出我正在寻找的最终结果:
销售人员 ID 最新平均 1 50 2 47.5我是编写联接和内部查询的新手,我无法超越销售人员为他们的所有订单提取平均值
SELECT Orders.SalesPersonID, Avg(Orders.Value) AS AvgOfValue
FROM Orders
INNER JOIN OrdHist
ON Orders.OrderID = OrdHist.OrderID
GROUP BY Orders.SalesPersonID;
SalesPersonID AvgOfValue
1 57.5
2 48.75
但这并没有过滤组内最近 2 个日期,因此非常感谢任何有关如何在子查询中选择或创建另一个联接的指导
【问题讨论】:
标签: sql ms-access join group-by subquery