回答
另一种选择是一个CTE和ROW_NUMBER()。以下将给你客户的平均订单。
Declare @YourTable table (CustID int,OrderDate Date,OrderAmount int)
Insert Into @YourTable values
(1,'2016-01-18',2500),
(1,'2016-02-13',5000),
(1,'2016-03-31',3000),
(2,'2016-03-18',1800),
(2,'2016-04-13',2200),
(2,'2016-05-31',2500)
;with cteBase as (
Select *
,RowNr=Row_Number() over (Partition By CustID Order By OrderDate Desc)
From @YourTable
)
Select CustID
,AvgOrder = avg(OrderAmount)
From cteBase
Where RowNr<=2
Group By CustID
返回
CustID AvgOrder
1 4000
2 2350
谢谢!有效。 – user107242
@ user107242很高兴知道。老实说,对窗口功能感到舒服...他们是非常宝贵的。干杯 –
使用ROW_NUMBER
窗函数
select [Customer ID],Avg([Total Amount]) as avg_amt
(
select row_number()over(partition by [Customer ID] order by [Date] desc) rn, *
from yourtable
) A
Where Rn <= 5 --change it based on requirement
Group by [Customer ID]
貌似当前表是事务表,所以你可能有一个单独的表称为Customer
其中[Customer ID]
是独一无二的,那么你可以用这个方法也
SELECT c.[Customer ID],
Avg([Total Amount])
FROM customers c
CROSS apply (SELECT TOP 5 [Total Amount]
FROM yourtable y
WHERE c.[Customer ID] = y.[Customer ID]
ORDER BY [Date] DESC) cs
GROUP BY [Customer ID]
上面的查询可以用OUTER APPLY
被改变,以获得列表所有customers
即使他没有与平均Total Amount
零交易。
谢谢!有效。 – user107242
一种方法使用row_number()
:
select customerid, avg(totalamount)
from (select t.*,
row_number() over (partition by customerid order by date desc) as seqnum
from t
) t
where seqnum <= x;
- 1. 德比DB最后x行平均值
- 2. 最大平均值,最小平均值和平均值
- 3. 如何获得最后X值的平均值?
- 4. 个人X值的平均Y值
- 5. MySQL:查找最后x个记录的每个条目的平均值
- 6. 查找每个人的最后X条记录的平均数
- 7. x的平均值的误差线除以y的平均值
- 8. 最大平均值
- 9. 最近x天的平均值(最后一个填充的单元格的开始)
- 10. 计算MapReduce(Nodejs,Mongoose)中最后一个X文档的平均值
- 11. 通过最后N个值的平均值过滤Pandas Dataframe
- 12. 平均Excel中多个单元格的最高三个值
- 13. 自动填充单元格,最大值,最小值,平均值
- 14. 商店最小值,最大值,平均中值“单”变
- 15. pandas - 添加一组最后3个元素的平均值由
- 16. 查找最小值,最大值,平均值,赔率和平均值。 Java
- 17. 平均条件和订单特定Oracle
- 18. 阵列计算最小值,最大值和平均值输出:最小值,最大值和平均值
- 19. 总和的平均值减最小值
- 20. ActiveRecord:基于协会列平均值的订单表
- 21. 计算平均值的平均值
- 22. 获取大熊猫数据框的最后N个平日的平均值
- 23. Excel VBA平均最后15个非空白单元格
- 24. 卸下最大值/最小值从阵列,取平均,输出平均
- 25. 如何在一组类平均值中显示最大和最小平均值
- 26. Mac os X:加载平均值
- 27. 计算多个平均值的平均值
- 28. 查找值的平均值,最大值和最小值进入
- 29. 如何查找Google表格中某列中最后7个值的平均值?
- 30. SAS:CAR最近30天的平均值
请张贴一些示例数据和预期的输出。 –
一种方法是计算由客户划分的row_number(),并按日期DESC排序 - 然后将该查询用作内部查询并选择row_number <= X并取平均值 - 或者您可以在WITH语句中设置它 – Cato
您的问题不清楚,请在这里查看以改善问题:https://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/ – TheGameiswar