mysql 得到连续的_Mysql获取连续的15天的销售数据

之前有做一个项目是关于亚马逊那块的erp.然后有一个需求是获取连续15天的销售信息,连续十五周的销售信息和连续12个月的销售数据做成图表统计;并且不连续的数据要将其补充完整,补充为0.

经过一番的百度和研究,最终写出来的SQL如下:(基本上我是没看懂)

在这之前先贴出我涉及到的三个项目表结构.

ceed303e90c18131e297b1fc7c380b78.png

上图这个表中保存的是主要的销售报告信息.

8b2afb96a048765b3528c97b46fb1c57.png

这个表存放的是相应的卖家信息

914397e739add5613ec1d68abe0a38c4.png

这个表没啥用,你可以用任何一张数据在15条以上的表代替这张表,只是起一个参照作用而已,不查询其中的任何数据.

接下来上查询连续15天的SQL

e4e7ab57f417244ff3783c79253a30e0.png

为了便于演示结果,我将条件都先去掉了,下边是演示结果,已经三张表出现的位置

840c9d34d1dd3f88a74de2225348cfc1.png

然后是具体的sql语句,拿去改改就好了:

SELECT

CONVERT (t2.days,CHAR) curDateTime,

IFNULL(SUM(esr.totalTurnoverRMB),0) as totalTurnoverRMB,

IFNULL(SUM(esr.totalAdRMB),0) as totalAdRMB,IFNULL(SUM(esr.totalSales),0) as totalSales

FROM

(

SELECT @rownum :=@rownum + 1 AS num,date_format(DATE_SUB(IFNULL(#{marketPlaceTime},now()), INTERVAL @rownum DAY),'%Y-%m-%d') AS days

FROM

(SELECT @rownum := - 1) AS r_init,

(SELECT em.id FROM erp_mail em LIMIT 15) AS c_init

) t2

LEFT JOIN

(select DATE_FORMAT(cur_date,'%Y-%m-%d') day,cur_date curDate,sum(total_turnover_RMB) totalTurnoverRMB,

sum(total_ad_RMB) totalAdRMB,sum(total_sales) totalSales

from erp_sale_report sr LEFT JOIN amz_seller s on s.id=sr.seller_id

where DATE_FORMAT(cur_date,'%Y-%m-%d')>

DATE_FORMAT(date_sub(IFNULL(#{marketPlaceTime},now()), interval 15 day),'%Y-%m-%d')

and s.valid =  1 AND sr.valid = 1

AND s.marketplace_id = #{marketPlace}

GROUP BY day) esr

ON (

CONCAT(

DATE_FORMAT(esr.curDate, '%Y'),

'-',

DATE_FORMAT(esr.curDate, '%m'),

'-',

DATE_FORMAT(esr.curDate, '%d')

) = t2.days )

GROUP BY t2.days

接下来是查询连续15周的,都差不多,具体我直接上sql

SELECT

t2.weeks curDateTime,

IFNULL(SUM(esr.totalTurnoverRMB),0) as totalTurnoverRMB,

IFNULL(SUM(esr.totalAdRMB),0) as totalAdRMB,IFNULL(SUM(esr.totalSales),0) as totalSales

FROM

(

SELECT @rownum :=@rownum + 1 AS num,date_format(DATE_SUB(IFNULL(NOW(),now()), INTERVAL @rownum WEEK),'%Y/%u') AS weeks

FROM

(SELECT @rownum := - 1) AS r_init,

(SELECT em.id FROM erp_mail em LIMIT 15) AS c_init

) t2

LEFT JOIN

(select DATE_FORMAT(cur_date,'%Y/%u')weekTime,cur_date curDate,sum(total_turnover_RMB) totalTurnoverRMB,

sum(total_ad_RMB) totalAdRMB,sum(total_sales) totalSales

from erp_sale_report sr LEFT JOIN amz_seller s on s.id=sr.seller_id

where DATE_FORMAT(cur_date,'%Y/%u')>

DATE_FORMAT(date_sub(IFNULL(NOW(),now()), interval 15 WEEK),'%Y/%u')

and s.valid =  1 AND sr.valid = 1

GROUP BY weekTime) esr

ON esr.weekTime= t2.weeks

GROUP BY t2.weeks

条件我都去掉了,具体的条件怎么加要看你本身的项目需求

最后是最近12个月的sql

SELECT

CONVERT (t2.mon,CHAR) curDateTime,

IFNULL(SUM(esr.totalTurnoverRMB),0) as totalTurnoverRMB,

IFNULL(SUM(esr.totalAdRMB),0) as totalAdRMB,IFNULL(SUM(esr.totalSales),0) as totalSales

FROM

(

SELECT @rownum :=@rownum + 1 AS num,date_format(DATE_SUB(IFNULL(now(),now()), INTERVAL @rownum MONTH),'%Y-%m') AS mon

FROM

(SELECT @rownum := - 1) AS r_init,

(SELECT em.id FROM erp_mail em LIMIT 12) AS c_init

) t2

LEFT JOIN

(select DATE_FORMAT(cur_date,'%Y-%m') month,cur_date curDate,sum(total_turnover_RMB) totalTurnoverRMB,

sum(total_ad_RMB) totalAdRMB,sum(total_sales) totalSales

from erp_sale_report sr LEFT JOIN amz_seller s on s.id=sr.seller_id

where DATE_FORMAT(cur_date,'%Y-%m')>

DATE_FORMAT(date_sub(IFNULL(NOW(),now()), interval 13 month),'%Y-%m')

and s.valid =  1 AND sr.valid = 1

GROUP BY month) esr

ON (

CONCAT(

DATE_FORMAT(esr.curDate, '%Y'),

'-',

DATE_FORMAT(esr.curDate, '%m')

) = t2.mon )

GROUP BY t2.mon

以上内容仅供参考.然后我也忘了我是参考的哪位大神的了,如有侵权,请联系我删除,谢谢.如果有可以更改优化的地方,也请大神指出,非常感谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值