SQL查询以获取符合条件的记录。

3

我想要为一个特定的公司(代码为13)计算以下内容:

  1. 总信用额度
  2. 已使用信用额度
  3. 已使用通话次数

我的数据如下图所示: enter image description here

我已计算出信用金额的总和(即总信用额度),其为200+100+5000+100 = 5400

现在,我想要计算已使用信用额度,计算方法如下:

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

所以“已用调用”将是上述总和,约为“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 

我不明白你的逻辑。为什么只对那一条记录进行差分? - Tim Biegeleisen
你的意思是什么?我正在制作一个单一的查询来获取这些记录,然后我将在PHP中使用它,为登录的不同公司提供服务。我只想制作上述查询。 - Asfandyar Khan
@TimBiegeleisen 这是因为充值日期(recharge_date)大于当前日期(current_date) - Sagar Gangwal
@SagarGangwal 很好的发现。 - Tim Biegeleisen
2个回答

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

@AsfandyarKhan 加油..!! - Sagar Gangwal

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;

请看看这是否有帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接