次の表があります。
user_id | Membership_type | start_Date
1 | 1 | 1
1 | 1 | 2
1 | 2 | 3
1 | 3 | 4
複数のユーザーがいて、メンバーシップの種類が変更されたときとその変更内容を次の形式でユーザーごとに確認する必要があります (開始日は datetime です。理解しやすいようにここに int に入れます)。
user_id |Membership_change| change_Date
1 | 1 to 2 | 3
1 | 2 to 3 | 4
私が試してみました
select m1.user_id, concat(m1.Membership_type, ' to ',m2.Membership_type), m2.start_date
from table_membership m1
join table_membership m2
on m1.user_id=m2.user_id and m1.start_date<m2.start_date and m1.membership_type<>m2.membership_type
しかし、これは戻ります
user_id |Membership_change| change_Date
1 | 1 to 2 | 3
1 | 1 to 2 | 3
1 | 1 to 3 | 4
1 | 2 to 3 | 4
重複する 1 対 2 は、グループ化によって削除する問題ではありませんが、1 対 3 の結果を回避する方法を考えることができないようです。基本的には、あるメンバーシップから次のメンバーシップに時系列で参加する必要があるだけです
どんなアイデアでも大歓迎です!
編集: 列 m1.start_date を追加し、account_id と m1.start_date でグループ化するというアイデアがあったため、各エントリが結合された最初の行のみを取得します。また、参加する前に日付で事前に並べ替えて、すべてが順番に並んでいることを確認します。テストします。