0

我有 3 个表:wp_names、wp_payments、wp_renewals。我在所有这些上都使用了 student_id 中的 JOIN 。

SELECT s.student_id AS 'Student ID'
    ,s.student_first_name AS 'First Name'
    ,@numberofregistrations := count(DISTINCT p.payment_id) as 'Number of Registrations'
    ,@latestregdate := date(max(p.date)) AS 'Latest Registration'
    ,@renewals := IF(count(DISTINCT r.date) >= 1, count(DISTINCT r.date), '') as Renewals
    ,@latestrenewal := date(max(r.date)) AS 'Latest Renewal'
    ,@latestpayment := IF(@renewals >= 1, @latestrenewal, @latestregdate) AS 'Latest P.'
    ,DATE_ADD(@latestpayment,INTERVAL 12 MONTH) AS 'Due Renewal'

FROM wp_names AS s
LEFT JOIN wp_payments AS p ON s.student_id = p.student_id
LEFT JOIN wp_renewals AS r ON s.student_id = r.student_id

GROUP BY s.student_id, p.payment_id, p.registration, p.date

这是我得到的结果。请注意,最新付款都是错误的,到期续订也是错误的。

如何使用我创建的变量?我想在 IF 语句中使用它们,例如:

如果(@renewals >=12,@latesrenewal,@latestregdate)。

并且:

DATE_ADD(@latestpayment,间隔 12 个月)

查询结果

最后,我不知道如何让 count(DISTINCT p.payment_id) 给出“2”的正确结果。取而代之的是,它将学生 ID“2”加倍,并将两个条目都计为 1。

总结起来,这两个问题是:

  1. 为什么变量没有按我的预期工作?
  2. 为什么计数不计算两个注册?

我很感激这方面的任何帮助。

4

0 回答 0