删除行并比较月份

时间:2016-01-13 06:26:10

标签: mysql sql

我有两张客户债务表。第一个是:

  

client_debts:( id ,client_name,total_debts,date_now,time_now)

和client_details表一起使用外键连接到client_debts,在其中,我们添加了每个客户端的付款

  

client_details:( id client_id ,付款,date_now,time_now)

我想要做的是,在我选择client_name时使用INNER JOIN,在client_details中创建一个包含来自client_details的列的total_debs,它为每个client_id生成付款总和。所以我试过这个:

SELECT t1.client_name, t1.total_debts, t2.client_id, sum(payment) as 'payments' 
FROM client_debts t1
INNER JOIN client_details t2
ON t1.id = t2.client_id
GROUP BY t2.client_id

结果是这样的:

enter image description here

黑色的行是客户在产品上支付所有债务的地方,即使他因为买了其他产品而有其他债务,所以我需要从表中删除这一行。因此,我尝试向此AND查询添加JOIN

SELECT t1.client_name, t1.total_debts, t2.client_id, sum(payment) as 'payments' 
FROM client_debts t1
INNER JOIN client_details t2
ON t1.id = t2.client_id AND t1.total_debts<>'payment'
GROUP BY t2.client_id

但结果仍然相同:

enter image description here

现在我真正想做的是删除客户支付总债务的行等于他们的付款,并添加一个新条件,我从client_details获取日期,并提取月份并比较它到本月,查看客户本月是否支付或仍未支付。

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

试试这个:

SELECT  main.* 
FROM    (SELECT    t1.client_name, t1.total_debts, t2.client_id, sum(payment) payments , t2.date_now ,
                    CASE MONTH(t2.date_now)  
                       WHEN MONTH(CURDATE()) THEN 'Paid'
                       ELSE 'Not Paid'
                    END current_month
        FROM client_debts t1  INNER JOIN client_details t2  ON t1.id = t2.client_id 
        GROUP BY t2.client_id) main
WHERE   main.total_debts<> main.payments;