Сравнение переменных внутри оператора IF в MYSQL

У меня есть 3 таблицы: wp_names, wp_payments, wp_renewals. Я использую JOIN в student_id на всех из них.

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, например:

IF (@renewals> = 12, @latesrenewal, @latestregdate).

А также:

DATE_ADD (@latestpayment, ИНТЕРВАЛ 12 МЕСЯЦЕВ)

Результаты запроса

И, наконец, я не могу понять, как получить количество (DISTINCT p.payment_id), чтобы получить правильный результат "2". Вместо этого он удваивает идентификатор студента "2" и считает 1 для обеих записей.

В итоге, два вопроса:

  1. Почему переменные не работают так, как я ожидал?
  2. Почему подсчет не учитывает обе регистрации?

Я ценю любую помощь в этом.

0 ответов

Другие вопросы по тегам