2017-07-19 95 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; 

请看看这是否有帮助。