某类商品在超市中的平均停留时间
问题
下面有一个简化的超市的库存管理系统内的一些表,为考察销售情况,需要算出 6 月份“生鲜”类的商品在超市内的平均停留时间。需要的表如下:
首先是商品表,记录各种产品的信息:
下面是进货记录表,超市在每天早上 5 点钟进货,下表记录了每次进货每种商品的进货数量:
下面是超市的销售记录详表:
思路
大致思路:首先要解决“平均停留时间”这个数据要如何计算,超市不可能为每件商品做单独的记录,所以计算每件商品的停留时间是行不通的。通过数学换算,可以知道,“平均停留时间”可以通过平均卖出时间减去平均进货时间得到,这个算法可以解决我们当前的问题。只要筛选出指定类别商品的进货和销售记录,接下来进行时间平均值的统计也是很容易进行的了。
-
首先将进货表和销售表的商品字段都替换为商品表中相应的记录。
-
筛选出“生鲜”分类的进货记录。
-
筛选出“生鲜”分类的销售记录。
-
求出总的进货数量。
-
以月初为起点,算出进货时间和起点时间的时间差乘以进货数量的积的总和。
-
求出总的销售数量。
-
以月初为起点,算出销售时间和起点时间的时间差乘以销售数量的积的总和。
-
对剩余的商品,即没卖出的商品,将其“销售时间”取为月底。
-
平均销售时间减去平均进货时间,即为平均滞留时间。
-
整理结果格式,将时间单位换算为天,并舍去过多的小数位,即为结果。
代码
A | ||
---|---|---|
1 | =file("C:\\txt\\Stock.txt").import@t().select(month(Datetime)==6). derive() | 6 月的进货表 |
2 | =file("C:\\txt\\Sale.txt").import@t().select(month(Datetime)==6). derive() | 6 月的销售表 |
3 | =file("C:\\txt\\Commodity.txt").import@t() | 商品表 |
4 | Fresh | 指定的类别 |
5 | >A1.keys(Commodity), A2.keys(Commodity), A3.keys(ID) | 设置三个表的主键 |
6 | >A1.switch(Commodity,A3), A2.switch(Commodity,A3) | 将进货和销售表的商品字段替换为记录 |
7 | =A1.select(Commodity.Category==A4) | 筛选出指定分类的进货记录 |
8 | =A2.select(Commodity.Category==A4) | 筛选出指定分类的销售记录 |
9 | =A7.sum(Volume) | 求出总进货数量 |
10 | =A7.sum(long(interval@s("2009-6-1 00:00:00",Datetime)*Volume)) | 以月初为起点,算出进货时间和起点的时间差总和 |
11 | =A8.sum(Volume) | 求出总销售数量 |
12 | =A8.sum(long(interval@s("2009-6-1 00:00:00",Datetime)*Volume)) | 以月初为起点,算出销售时间和起点的时间差总和 |
13 | =long((A9-A11)*interval@s("2009-6-1 00:00:00","2009-7-1 00:00:00")) | 对没卖出的商品,设置其滞留时间截止到月底 |
14 | =(A12+A13)/A9-A10/A9 | 平均销售时间减去平均进货时间,即为平均滞留时间 |
15 | =floor(A14/60/60/24,1) | 换算成天数,并舍去多余小数,方便查看 |
英文版
数据文件
Commodity.txt
Sale.txt
Stock.txt