情况说明一下:
需求:取出30天的平均销量.
此SQL是取出平均值.
需要30天的话 就 * 30就可以了
select avg(d.xssl)
from CC_JXC_GYS_DAY d
inner join CC_JXC_GYS_DAY_HIS his
on d.gys = his.gys
where his.rq in (select distinct d.rq
from CC_JXC_GYS_DAY d
group by d.rq
having count(*) >= 1)
and his.rq between his.rq and d.rq
需求:取出30天的平均销量.
此SQL是取出平均值.
需要30天的话 就 * 30就可以了
select avg(d.xssl)
from CC_JXC_GYS_DAY d
inner join CC_JXC_GYS_DAY_HIS his
on d.gys = his.gys
where his.rq in (select distinct d.rq
from CC_JXC_GYS_DAY d
group by d.rq
having count(*) >= 1)
and his.rq between his.rq and d.rq
from CC_JXC_GYS_DAY d
inner join CC_JXC_GYS_DAY_HIS his
on d.gys = his.gys
where his.rq in (select distinct d.rq
from CC_JXC_GYS_DAY d
group by d.rq
having count(*) >= 1)
and his.rq between his.rq and d.rq此SQL是取出平均值. 所有20W数据的平均值?
最疑惑的是and his.rq between his.rq and d.rq,自己和自己的日期比较?有意义么,肯定相等啊,
完全没有时间区间啊,兄弟,SQL有问题,贴出完整表结构和需求
and his.rq between his.rq and d.rq
不就是 his.rq<=d.rq么
当日销售表CC_JXC_GYS_DAY RQ DATE N 日期
MC VARCHAR2(4) N 卖场
GYS VARCHAR2(8) N 供应商号
GYSM VARCHAR2(60) Y 供应商名
SPTM VARCHAR2(13) N 商品编码
SPM VARCHAR2(60) Y 商品名
PP VARCHAR2(6) Y 品牌号
PPM VARCHAR2(20) Y 品牌名
CD VARCHAR2(6) Y 产地号
CDM VARCHAR2(32) Y 产地名
DZXL VARCHAR2(15) N 类别号
DZXLM VARCHAR2(60) Y 类别名
DW VARCHAR2(4) Y 单位
JYFS CHAR(1) N 经营方式
LSJ FLOAT N 实际零售价
XSSL FLOAT Y 销售数量
XSJE FLOAT Y 实际销售额
HSJJ FLOAT N 含税进价
HSJJJE FLOAT Y 含税成本
XSSLZB FLOAT Y 销售额
XSSLPM NUMBER Y 含税毛利
XSJEZB FLOAT Y 进销差价
XSJEPM FLOAT Y
GYS_SLZB FLOAT Y
GYS_SLPM FLOAT Y
GYS_JEZB FLOAT Y
GYS_JEPM FLOAT Y
KCSL FLOAT Y 总折扣
KCJE FLOAT Y 供应商折扣
BAK1 VARCHAR2(13) Y 商品条码
BAK2 VARCHAR2(10) Y 备用
库存表CC_STR_COM_HZ RQ DATE N 日期
SPTM VARCHAR2(13) N 商品编码
SPM VARCHAR2(60) Y 商品名称
MC VARCHAR2(15) N 卖场编码
PP VARCHAR2(6) Y 品牌编码
DZXL VARCHAR2(15) N 类别编码
GZ VARCHAR2(15) N 柜组
GYS VARCHAR2(15) N 供应商编码
JYFS FLOAT N 经营方式
ZHHSJJ FLOAT Y 最后含税进价
ZHBHSJJ FLOAT Y 最后不含税进价
KL FLOAT Y 扣率
LSJ FLOAT Y 零售价
KCSL FLOAT Y 库存数量
KCBHSJE FLOAT Y 库存不含税金额
KCHSJE FLOAT Y 库存含税金额
KCLSJE FLOAT Y 库存零售金额历史日销售表CC_JXC_GYS_DAY_HIS RQ DATE N 日期
MC VARCHAR2(4) N 卖场
GYS VARCHAR2(8) N 供应商号
GYSM VARCHAR2(60) Y 供应商名
SPTM VARCHAR2(13) N 商品编码
SPM VARCHAR2(60) Y 商品名
PP VARCHAR2(6) Y 品牌号
PPM VARCHAR2(20) Y 品牌名
CD VARCHAR2(6) Y 产地号
CDM VARCHAR2(32) Y 产地名
DZXL VARCHAR2(15) N 类别号
DZXLM VARCHAR2(60) Y 类别名
DW VARCHAR2(4) Y 单位
JYFS CHAR(1) N 经营方式
LSJ FLOAT N 实际零售价
XSSL FLOAT Y 销售数量
XSJE FLOAT Y 实际销售额
HSJJ FLOAT N 含税进价
HSJJJE FLOAT Y 含税成本
XSSLZB FLOAT Y 销售额 同类别销售数量占比
XSSLPM NUMBER Y 含税毛利
XSJEZB FLOAT Y 进销差价
XSJEPM FLOAT Y 同类别销售金额排名
GYS_SLZB FLOAT Y 本供应商销售数量占比
GYS_SLPM FLOAT Y 本供应商销售数量排名
GYS_JEZB FLOAT Y 本供应商销售金额占比
GYS_JEPM FLOAT Y 本供应商销售金额排名
KCSL FLOAT Y 总折扣
KCJE FLOAT Y 供应商折扣
BAK1 VARCHAR2(13) Y 商品条码
BAK2 VARCHAR2(10) Y 备用另:
说明下那个SQL:
这是昨日我修改后的SQL: (select (avg(d.xssl) * 30) as dsinventory
from CQ_JXC_GYS_DAY d
inner join CQ_JXC_GYS_DAY_HIS his
on d.gys = his.gys
where his.rq in (select distinct d.rq - 30
from CQ_JXC_GYS_DAY d
group by d.rq
having count(*) >= 1)
and his.rq between his.rq and d.rq) p
通过取出当日销售表里的日期-30天.获得30天前的日期.
然后通过与历史日销售里的日期进行判断.取出相同的日期数据,
然后取出销售数量(30天),通过AVG取得每日平均值,最后*30就是30天的可销售天数了
判断历史日期中,在历史日期和当天日期之间的数据,作为判断条件.
(PS:我说的20W是总数据,但是重复数据就有差不多20W--测试数据有问题.)
from CQ_JXC_GYS_DAY d
group by d.rq
having count(*) >= 1通过取出当日销售表里的日期-30天.获得30天前的日期.
为什么这么取?当日销售表里的日期-30天?
取当天的日期-30不久OK了,如果没有的话也是销售表里取最大日期-30不久OK了?