2013-03-07 46 views
0

我有如下表:MySQL的:事件表:按時間順序連續加入

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和group_ account_id和m1.start_date,所以我只會得到每個條目加入第一行。此外,還要根據加入前的日期進行預先排序,以確保它們全部符合要求。將測試。

回答

0

有一個想法,通過ACCOUNT_ID和m1.start_date添加列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 
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 
+0

這仍然會留下1到3的結果,這是不期望的,因爲它不是按時間順序。用戶有一個會員類型1,然後再次1,然後從1更改爲2,然後從2更改爲3.我只需要按時間順序邏輯更改 – AdrianBR 2013-03-07 11:09:49

+0

您檢查,因爲我們與Membership_change也分組 – 2013-03-07 11:11:00

+0

是的,因爲1到3是獨一無二的,你正在分組,它將被保留 – AdrianBR 2013-03-07 11:12:46