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 つの質問は次のとおりです。
- 変数が期待どおりに機能しないのはなぜですか?
- カウントが両方の登録をカウントしないのはなぜですか?
これについて何か助けていただければ幸いです。