我有每日购物金额的DB记录。 样本记录如下:
14.12.2015 11:00 --- 750,00
14.12.2015 14:35 --- 295,00
.....有成千上万的14.12.2015
15.12.2015 17:45 --- 650,00
15.12.2015 18:46 --- 395,00
....直到
,还有成千上万的15.12天2015年12月24日12:38 --- 675,00 ...
这意味着我有12月14日至24日的11天记录。我想按日期分组记录。所以我使用Linq to Entities命令并获得我想要的结果。
var dailyList = await db.ShoppingData.Where(c=>StoreId == id)
.Groupby(c=> SqlFunctions.DatePart("dw",c.ShoppindDate))
.Select(o=> new ShowShoppingDailyVM{
Day = o.Key,
Turnover = o.DefaultIfEmpty().Sum(a=>a.InvoiceAmount),//Total Turnover
Avg= o.DefaultIfEmpty().Sum(a=>a.InvoiceAmount) / (What??) //Avg turnover
Count = o.Count()
}).ToListAsync();
这给了我
1,2,3,4,5,6,7 as days,
1200,1450,960 ......作为计数
12.500,17.650,18.950 ......作为营业额
在这11天中,我有2个星期一,2个星期二,2个星期三和2个星期四(1个星期五,1个星期六,1个星期日)。 我需要的东西会给我周一的平均营业额。当我使用Average方法时,它将星期一营业额除以星期一计数(实际上是CartAverage)。 但实际上我需要获得周一营业额/周一计数(2周一不是1200笔交易)
如何获得每日金额的累积平均值?
答案 0 :(得分:2)
也许是这样的?
var dailyList = await db.ShoppingData.Where(c=>StoreId == id)
.GroupBy(c=> SqlFunctions.DatePart("dw",c.ShoppindDate))
.Select(o=> new ShowShoppingDailyVM
{
Day = o.Key,
Turnover = o.DefaultIfEmpty().Sum(a=>a.InvoiceAmount),
Avg = o.DefaultIfEmpty().Sum(a=>a.InvoiceAmount)
/o.Select(d => d.ShoppindDate).Distinct().Count()
Count = o.Count()
})
.ToListAsync();
答案 1 :(得分:0)
我想我已经解决了。我再次分组了#34;分组日#34;按周计算,我将总营业额除以周数周数。
以下是工作代码:
var dailyList = await db.ShoppingData.Where(c=>StoreId == id)
.Groupby(c=> SqlFunctions.DatePart("dw",c.ShoppindDate))
.Select(o=> new ShowShoppingDailyVM{
Day = o.Key,
Turnover = o.DefaultIfEmpty().Sum(a=>a.InvoiceAmount),//Total Turnover
//Avg= o.DefaultIfEmpty().Sum(a=>a.InvoiceAmount) / (What??) //Avg turnover
Avg = o.DefaultIfEmpty().Sum(a=>a.InvoiceAmount) / (decimal) o.GroupBy(a=>
SqlFunctions.DatePart("week",c.ShoppindDate)).Count(),
Count = o.Count()
}).ToListAsync();
这正是我所需要的。按天分组,然后在分组的日期内按周分组。 2015年12月14日和2015年12月21日给我星期一和星期2。 (一年中的51.和52.周)