0

wp_names、wp_payments、wp_renewals の 3 つのテーブルがあります。私はそれらのすべてで 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ステートメント内でそれらを使用したいと思います。

IF(@renewals >=12、@latesrenewal、@latestregdate)。

また:

DATE_ADD(@latestpayment, INTERVAL 12 MONTH)

クエリの結果

最後に、count(DISTINCT p.payment_id) を取得して「2」という正しい結果を得る方法がわかりません。これに代えて、学生ID「2」を2倍にして、両方のエントリーを1としてカウントしています。

要約すると、2 つの質問は次のとおりです。

  1. 変数が期待どおりに機能しないのはなぜですか?
  2. カウントが両方の登録をカウントしないのはなぜですか?

これについて何か助けていただければ幸いです。

4

0 に答える 0