Mysql:如果另一行上的数据等于当前行上的数据,则为上一行数据

Mysql:如果另一行上的数据等于当前行上的数据,则为上一行数据,mysql,Mysql,所以我有下面的会员历史记录表 User_ID | Start date | End Date | Type(0-7) | -------------------------------------------------- 2 | date1 | date2 | 0 | -------------------------------------------------- 2 | date3 |

所以我有下面的会员历史记录表

User_ID  |  Start date  |  End Date  |  Type(0-7) |  
--------------------------------------------------
    2    |   date1      |  date2     |    0       |  
--------------------------------------------------
    2    |   date3      |  date4     |    3       |  
--------------------------------------------------
    2    |   date5      |  date6     |    3       |  
--------------------------------------------------
    2    |   date7      |  date8     |    1       |  
--------------------------------------------------
    3    |   date9      |  date10    |    6       |  
--------------------------------------------------
    3    |   date11     |  date12    |    0       |  
--------------------------------------------------
我正在尝试使用以下结果创建mysql查询:

    User_ID  |  Start date  |  End Date  |  Type(0-7) |PrevEnd-CurStart| Prevtype    
    ----------------------------------------------------------------------------------
        2    |   date1      |  date2     |    0       |  null OR 0     | null OR 0
    ----------------------------------------------------------------------------------
        2    |   date3      |  date4     |    3       |  Date3-Date2   |  0
    ----------------------------------------------------------------------------------
        2    |   date5      |  date6     |    3       |  Date5-Date4   |  3
    ----------------------------------------------------------------------------------
        2    |   date7      |  date8     |    1       |  Date7-Date6   |  3
    ----------------------------------------------------------------------------------
        3    |   date9      |  date10    |    6       |  null Or 0     |  null OR 0
    ----------------------------------------------------------------------------------
        3    |   date11     |  date12    |    0       |  Date11-Date10 |  6
    ----------------------------------------------------------------------------------
我输入Null或0,因为从那时起,我可以以任何方式使用它

我该如何编写mysql查询呢?这只是我需要的一份报告的子查询,我昨天、昨天晚上和今天整天都在做这个。非常感谢你的帮助。运行时间没有什么相关性,因为我每月只需要运行一次

编辑: 要获得当前输出,我使用以下命令。“1,2,3,4分组”是因为我需要消除很多重复项

select 
 mh.account_id, 
 mh.start_date, 
 mh.end_date, 
 mh.`type`
from tbl_membership_history mh join tbl_membership m on mh.account_id=m.account_id
group by 1,2,3,4
order by 1,2,3,4
limit 100

您可以在表上与较早的记录进行自联接,然后进行聚合以查找这些较早记录的最新结束日期,该日期给出了以前的结束日期。然后必须再将该结果与表联接一次,以查找上一条记录的类型:

SELECT   res.*, prv.Type AS prvType
FROM (
  SELECT   cur.*, MAX(bef.endDate) AS prvEnd
  FROM     history AS cur LEFT JOIN history AS bef
        ON bef.User_ID = cur.User_ID AND bef.endDate <= cur.startDate
  GROUP BY cur.User_ID, cur.startDate, cur.endDate, cur.Type
) res LEFT JOIN history AS prv
        ON prv.User_ID = res.User_ID AND prv.endDate = res.prvEnd

看吧。

先生,你真是个天才!我选择了一个离线的周末,但我只是运行它!太神了非常感谢。