2017-07-19 191 views
3

我想計算下面的東西對特定公司即是13的條件的記錄:SQL查詢來獲取匹配

  1. 總學分
  2. 使用信用
  3. 使用電話

我有我的數據,如下圖所示。 enter image description here

我算credit_amount(total credit),這是200+100+5000+100 = 5400

現在我想計算Used Credit這應該是這樣的

200 + 100 + 5000 + 70 = 5370 

70來了,因爲它是從的總和最後一個包 這是credit_amount 100 - credit_remaining 30 = 70.

因爲你可以看到recharge_date如果該日期大於當前日期,那麼包是活動的。所以目前的活動包是第一個在上面的截圖我已附加。

我怎樣才能找到使用的學分?

使用的總通話在相同的情況下..這將是

200/0.24 = 833.33 

100/0.24 = 416.667 

5000/0.20 = 25000 

70/0.30 = 233.33 

所以used calls將是以上這大約是26483.33

這裏的總和是我的查詢代碼未給

SELECT (SELECT Sum(credit_amount) 
     FROM `company_credit` 
     WHERE `company_id` = 13) AS total_credit, 
     Sum(credit_amount/rate) AS used_calls, 
     Sum(credit_amount)   AS used_credit 
FROM `company_credit` 
WHERE `company_id` = 13 
     AND recharge_date < Now() 
ORDER BY `id` DESC 
+0

我不遵循你的邏輯。爲什麼只是爲了這個單獨的記錄而採用差異? –

+0

你的意思是?我正在做一個單一的查詢來獲取這些記錄,然後我將在不同的公司使用它在任何公司登錄的時間。我只想做出上述查詢。 –

+0

@TimBiegeleisen這是因爲'recharge_date'大於'current_date' –

回答

4
SELECT Sum(credit_amount) AS total_credit, 
     Sum(CASE WHEN recharge_date < Now() THEN (credit_amount/rate) ELSE ((credit_amount-credit_reamining)/rate) END) AS total_sms, 
     Sum(CASE WHEN recharge_date < Now() THEN credit_amount ELSE (credit_amount-credit_reamining) END)   AS used_credit 
FROM `company_credit` 
WHERE `company_id` = 13 
ORDER BY `id` DESC 

這個查詢:我需要值適用於company_id = 13。如果您計算所有company_id的相同邏輯,只需刪除WHERE條件並放入GROUP BY company_id。你會得到所有公司的計算記錄。

試試上面的查詢。

這裏我簡單地使用了CASE WHEN來指定哪些記錄有餘額。

並使用該查詢,你可以最終計算出你的total_sms,used_credit,total_credit

+0

感謝薩加,它的工作。 –

+0

@AsfandyarKhan保持它..! –

0
SELECT SUM(credt_amount) , 
    SUM(
    CASE 
    WHEN cr_date > 
     (SELECT cur_date FROM tbl_eod_bod_stat 
    ) 
    THEN credt_amount - credt_rem 
    ELSE credt_amount 
    END) AS Used_Credit , 
    SUM(
    CASE 
    WHEN cr_date > 
     (SELECT cur_date FROM tbl_eod_bod_stat 
    ) 
    THEN (credt_amount - credt_rem)/rate 
    ELSE (credt_amount/rate) 
    END) AS rateDiv 
FROM tbl_company_2; 

請看看這是否有幫助。