2016-08-24 211 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