2016-08-24 159 views
0

我有表列的帐户,订单号,创建日期,这张表的一个帐户包含多个订单号。但我的要求是我想基于CreatedDate获取该特定帐户的记录,比较本周与前一周的比较。如何计算Mysql中的百分比?

假设账户在前一周创建了100个订单,并且创建的当周订单为50,那么我们希望通知该特定账户本周订单小于或等于前一周的订单。根据我们的业务要求,我们会将电子邮件发送至当前订单数量少于前一周订单50%的特定帐户。我们必须通知该帐户。

计算当前周订单数量或前一周订单的差异?

如何达到这个要求哪一个更好地获取记录。

  1. 使用简单的查询
  2. 创建视图
  3. 创建存储过程

我有以下表中的数据:

表名:LabOrder

Account  orderNo  CreatedDate 
-------------------------------------- 
101    13   2016-08-2 
102    56   2016-08-9 
103    79   2016-08-24 

我想要下面的数据。存储过程将比较当前周和前一周的订单,如果该订单减少50%,则会使该账户的卷减少50%。

Account CurrentWeekOrder PreviousWeekOrder Difference(%)    
--------------------------------------------------------------- 
101  50     10     -40 
102  60     180     120 -> This has to be notified 
103  30     25     5 -> No Need to notified 

如何为上述细节创建存储过程?请帮助我我是一名Java开发人员,并且之前未在MySql中创建任何存储过程。这是我第一次尝试。

我试图创建存储过程,但我现在面临很多像如何存储问题,如果该查询返回多个记录:

如果有人给我的想法如何创建,如果该存储过程任何建议。

感谢

+2

您的示例数据与期望的结果无关,使问题难以理解。 –

+0

为什么你想要一个存储过程? – Strawberry

+0

@Strawberry你有什么建议? – Sitansu

回答

2

我认为存储过程是不是你的情况是不错的选择,因为每个用户插入一条记录时,数据库必须更新的同一个星期以前的记录。我建议你使用视图来实现你的目标。这是我对你的解决方案:

  1. 创建具有以下SQL视图

    select 
        account, 
        count(*) as weekorder, 
        week(createDate) as createWeek 
    from 
        laborder 
    where 
        week(createDate) >= week(now()) - 1 ----last week and current week 
    group by 
        account, week(createDate) 
    
  2. 假设视图的名字是厂景,现在你可以查询你所需要的:

    select 
        a.account, 
        a.weekorder as CurrentWeekOrder, 
        b.weekorder as PreviousWeekOrder, 
        a.weekorder/b.weekorder * 100 as Difference 
    from 
        view1 as a 
    left join 
        view1 as b on a.account = b.account and a.createWeek = b.createWeek - 1 
    where 
        a.createWeek = week(now()) and 
        a.weekorder/b.weekorder * 100 < 50 
    

希望上面的方法可以帮助你。

+0

我不会打扰你的观点 – Strawberry