0

会費を支払わなければならない会員がいます。そして、支払い日と会員期間(1か月または数か月分を支払うことができます)を保存します。

どの支払いが期限切れか、または間もなく期限切れになるかを知りたいのですが。

私のロジックは、各メンバーシップの有効期限 (最後の支払い日 + メンバーシップ期間) を取得し、各メンバーのその最大値を調べることでした。

これが私のクエリですが、理由を説明したいと思います。DB のフォーマットについても質問したいかもしれません (ただし、有効期限を保存するように言わないでください)。

SELECT tbl.company AS company,
       MAX(ADDDATE( paydate, INTERVAL paylength MONTH ))) AS expiration,
       tbl.id
FROM tblPayments
JOIN tbl ON tblPayments.comp_id = tbl.id
GROUP BY expiration
ORDER BY expiration ASC

計算フィールドによるグループ化ができない可能性があることを読みましたが、MySQL に関する私の知識は回避策を理解するのに十分ではありません。あなたが提供できる助けをいただければ幸いです!ありがとう!

4

1 に答える 1

3

グループの集計結果によってグループ化していますが、これは不可能であり、意図したものではありません。あなたの説明に基づいて、私はあなたがこれをやろうとしていると思います

SELECT 
    tbl.company AS company, 
    MAX(ADDDATE( paydate, INTERVAL paylength MONTH )) AS expiration,
    tbl.id 
FROM tblPayments 
JOIN tbl 
    ON tblPayments.comp_id = tbl.id 
GROUP BY tbl.company , tbl.id 
HAVING expiration < NOW()
ORDER BY expiration ASC

また、@dleiftah は良い点を指摘しています。MySQL では許可されているように見えますが、GROUP BYMSSQL では許可されていないため、常にエイリアスを使用できるわけではありません。正確にいつだったか忘れました...

于 2012-06-07T02:15:33.520 に答える