某类商品在超市中的平均停留时间

 

问题

下面有一个简化的超市的库存管理系统内的一些表,为考察销售情况,需要算出 6 月份“生鲜”类的商品在超市内的平均停留时间。需要的表如下:

首先是商品表,记录各种产品的信息:

imagepng

下面是进货记录表,超市在每天早上 5 点钟进货,下表记录了每次进货每种商品的进货数量:

imagepng

下面是超市的销售记录详表:

imagepng

思路

大致思路:首先要解决“平均停留时间”这个数据要如何计算,超市不可能为每件商品做单独的记录,所以计算每件商品的停留时间是行不通的。通过数学换算,可以知道,“平均停留时间”可以通过平均卖出时间减去平均进货时间得到,这个算法可以解决我们当前的问题。只要筛选出指定类别商品的进货和销售记录,接下来进行时间平均值的统计也是很容易进行的了。

  1. 首先将进货表和销售表的商品字段都替换为商品表中相应的记录。

  2. 筛选出“生鲜”分类的进货记录。

  3. 筛选出“生鲜”分类的销售记录。

  4. 求出总的进货数量。

  5. 以月初为起点,算出进货时间和起点时间的时间差乘以进货数量的积的总和。

  6. 求出总的销售数量。

  7. 以月初为起点,算出销售时间和起点时间的时间差乘以销售数量的积的总和。

  8. 对剩余的商品,即没卖出的商品,将其“销售时间”取为月底。

  9. 平均销售时间减去平均进货时间,即为平均滞留时间。

  10. 整理结果格式,将时间单位换算为天,并舍去过多的小数位,即为结果。

代码

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) 换算成天数,并舍去多余小数,方便查看

结果

imagepng