0

次の表があります。

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 でグループ化するというアイデアがあったため、各エントリが結合された最初の行のみを取得します。また、参加する前に日付で事前に並べ替えて、すべてが順番に並んでいることを確認します。テストします。

4

2 に答える 2

0

GROUP BY がありません

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
GROUP BY user_id, Membership_change, change_Date
于 2013-03-07T11:06:49.397 に答える
0

列 m1.start_date を追加し、account_id と m1.start_date でグループ化するというアイデアがあったため、各エントリが結合された最初の行のみを取得します。また、参加する前に日付で事前に並べ替えて、すべてが順番に並んでいることを確認します。

select m.user_id, m.membership_change, m.change_date from
(
select
  m1.user_id,
  concat(m1.Membership_type, ' to ',m2.Membership_type) as membership_change,
  m2.start_date as change_date, 
m1.start_date
from (select * from table_membership order by start_date asc)m1
  join (select * from table_membership order by start_date asc)m2
    on m1.user_id = m2.user_id
      and m1.start_date < m2.start_date
      and m1.membership_type <> m2.membership_type
GROUP BY m1.user_id,  m1.start_Date
)m group by 1,2,3
于 2013-03-07T14:03:12.133 に答える