正如标题所说,我想,对于给定时期内的每个月,获得过去24个月的滚动总和。
英语不是我的母语,所以我想澄清一下:假设我定义了一个从2020年1月开始到2022年1月结束的时间段。
对于这段时间内的每个月,我想计算前24个月的总销售额。
例如,对于2020年1月,我将计算2018年1月****(这很重要,因为该期间从2020年开始,但我必须计算前两年相对于我处理的月份的销售额)和2020年1月之间的所有销售额。对于2020年2月,我将对2018年2月至2020年2月之间的所有销售额进行求和,以此类推。
我的销售收藏看起来像这样:
[
{
saleDate: ISODate("2018-01-01"),
salesCount: 121,
},
{
saleDate: ISODate("2018-01-02"),
salesCount: 234,
},
{
saleDate: ISODate("2018-01-03"),
salesCount: 521,
}
]
因此,我想得到这样的东西:
[
{
year: 2020,
month: 1,
lastTwoYearSales: 8198
},
{
year: 2020,
month: 2,
lastTwoYearSales: 9928
},
{
year: 2020,
month: 3,
lastTwoYearSales: 9218
},
...
{
year: 2022,
month: 1,
lastTwoYearSales: 11219
}
]
以下是我到目前为止使用聚合管道所做的:
[
{
$match: {
saleDate: {
$gte: ISODate("2018-01-01"),
$lt: ISODate("2022-02-01")
}
}
},
{
$group: {
_id: {
year: { $year: "$saleDate" },
month: { $month: "$saleDate" }
},
monthlySales: { $sum: "$salesCount" }
}
},
{
$group: {
_id: "$_id.month",
monthly_sales: {
$push: {
year: "$_id.year",
monthlySales: "$monthlySales"
}
}
}
},
{
$project: {
_id: 0,
month: "$_id",
rolling_sum: {
$map: {
input: "$monthly_sales",
as: "sales",
in: {
year: "$$sales.year",
monthlySales: {
$sum: {
$cond: [
{ $gte: ["$$sales.year", { $subtract: ["$_id", 2] }] },
"$$sales.monthlySales",
0
]
}
}
}
}
}
}
}
]
这是我所能做的,但是上面的查询有几个问题。
首先,它总结了整个前两年。即使我目前处理的是2021年7月,它也会将2019年1月至6月的销售额包括在总和中。
它还将计算过去2年到期末的销售额,而不是当月的销售额。我不知道该怎么做。
先谢谢你了!
1条答案
按热度按时间bxgwgixi1#
你能尝试下面的查询和检查,如果这有助于您的要求?