我有两张桌子,顾客和付款。我正在尝试仅选择在指定月份和年份内有付款的新客户,而在另一个月内没有先前的付款。
表客户
id - name
表格付款
id - id_customer - 月 - 年 - 金额
SELECT * FROM customer, payment
WHERE Customer.id = Payment.id_customer
AND month = '$month'
AND year = '$year'
这可以获得特定月份和年份的所有付款,但我不知道如何排除所有其他先前付款的客户。
感谢您的时间。
答案 0 :(得分:0)
要获取第一个付款日期,请使用GROUP BY
。但是,您必须先将值转换为类似日期的内容:
SELECT p.id_customer, MIN(CONCAT_WS, '-', p.year, p.month)) as first_yyyymm
FROM payment p
GROUP BY p.id_customer;
您应将付款日期存储为日期。
答案 1 :(得分:0)
我认为如果没有第三张桌子,你就无法做到这一点。您可以做的是创建第三个表,其中包含您在查询中选择的所有ID,并在每次运行选择查询时更新它。 然后下面的查询可能会起作用:
SELECT * FROM customer c, payment p WHERE c.id = p.id_customer
AND month = '$month'AND year = '$year'AND p.id NOT IN (SELECT id FROM
third_table)
希望它能回答你的问题。