Mysql获取连续的15天的销售数据

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

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

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

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

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

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

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

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

然后是具体的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
        <if test="marketPlace != null and marketPlace != ‘‘">
            AND s.marketplace_id = #{marketPlace}
        </if>
        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

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

原文地址:https://www.cnblogs.com/lswzt/p/10600172.html

时间: 2024-08-29 23:43:04

Mysql获取连续的15天的销售数据的相关文章

MySQL 获取连续范围

1.原始数据 2.把running_number转成数据,并加上一列有序数字 SELECT d.running_number+0 running_number,@a:[email protected]+1 rn FROM device_data d,(SELECT @a:=0) a where d.device_id=13 order by d.running_number; 3.running_number与有序数据的差,差(diff)相同的的running_number说明是连续的 SELE

mysql 获取当前日期及格式化[转]

MYSQL 获取当前日期及日期格式获取系统日期: NOW()格式化日期: DATE_FORMAT(date, format)注: date:时间字段format:日期格式 返回系统日期,输出 2009-12-25 14:38:59select now();输出 09-12-25select date_format(now(),'%y-%m-%d'); 根据format字符串格式化date值: %S, %s 两位数字形式的秒( 00,01, ..., 59)%I, %i 两位数字形式的分( 00,

mysql 获取当前日期及格式化

MYSQL 获取当前日期及日期格式获取系统日期: NOW()格式化日期: DATE_FORMAT(date, format)注: date:时间字段format:日期格式 返回系统日期,输出 2009-12-25 14:38:59select now();输出 09-12-25select date_format(now(),'%y-%m-%d'); 根据format字符串格式化date值: %S, %s 两位数字形式的秒( 00,01, ..., 59)%I, %i 两位数字形式的分( 00,

转: MYSQL获取更新行的主键ID

在某些情况下我们需要向数据表中更新一条记录的状态,然后再把它取出来,但这时如果你在更新前并没有一个确认惟一记录的主键就没有办法知道哪条记录被更新了. 举例说明下: 有一个发放新手卡的程序,设计数据库时常见的方案有两种: 方案一:使用一张表,新手卡和领取记录都在一起,这样主要字段就是新手卡(主键).用户ID(惟一).领取状态(非必要)等 这样的话数据库操作就简单了,直接一条update sql,将用户id更新到这张表里,然后根据用户ID再select出来就好了.但这样记录很多时就会有效率的问题,暂

获取连续登陆天数,连续签到天数 ,方法优化

获取连续登陆天数,连续签到天数,类似这样的需求应该是一个常见的需求,那么我们有没有一套成熟的解决方案呢 ?下面我来跟大家分享一下我的故事. 在猴年马月的一天,有个用户反馈个人中心打开缓慢,需要7.8秒,做为一个认真负责任的程序员GG,我尼玛放下手中的其他工作,跟踪调查并且解决该问题. 第一步重现问题: 连着登陆了好几个账号到个人中心,打开都不慢呀 ,那是什么问题呢,就你一个人出问题,是你人品差吧,正当打算以此敷衍用户的时候,测试组的小陶说,他也遇到了这个问题,纳尼 !!你个人品差的家伙 ,让俺来

mysql 获取季度的第一天 本月的第一天,本周的第一天sql语句(转)

感谢:http://www.111cn.net/database/110/d45124323da8d2d87b80f78319987eda.htm 查看同主题的另一篇博客:http://blog.csdn.net/cleanfield/article/details/41447585 ------------------------------------------------------------------------------ 本季度的第一天 ,然后你可以把字符串再转换为日期. 方法

mysql获取group by的总记录行数方法

mysql获取group by内部可以获取到某字段的记录分组统计总数,而无法统计出分组的记录数. mysql的SQL_CALC_FOUND_ROWS 使用 获取查询的行数 在很多分页的程序中都这样写: 代码如下 复制代码 SELECT COUNT(*) from `table` WHERE ......; 查出符合条件的记录总数 代码如下 复制代码 SELECT * FROM `table` WHERE ...... limit M,N; 查询当页要显示的数据 这样的语句可以改成: 代码如下 复

MySQL获取Schema表名和字段信息

MySQL获取Schema表名和字段信息 获取表名 select TABLE_NAME,TABLE_TYPE,ENGINE,TABLE_ROWS,TABLE_COMMENT,CREATE_TIME,UPDATE_TIME, CHECK_TIME from information_schema.TABLES where TABLE_SCHEMA='t_shop' ; 获取字段名 select COLUMN_NAME,DATA_TYPE,CHARACTER_MAXIMUM_LENGTH,IS_NUL

[实战]MVC5+EF6+MySql企业网盘实战(15)——逻辑重构2

写在前面 上篇文章修改文件上传的逻辑,这篇修改下文件下载的逻辑. 系列文章 [EF]vs15+ef6+mysql code first方式 [实战]MVC5+EF6+MySql企业网盘实战(1) [实战]MVC5+EF6+MySql企业网盘实战(2)——用户注册 [实战]MVC5+EF6+MySql企业网盘实战(3)——验证码 [实战]MVC5+EF6+MySql企业网盘实战(4)——上传头像 [Bootstrap]modal弹出框 [实战]MVC5+EF6+MySql企业网盘实战(5)——登录