gpt4 book ai didi

mysql : Previous Row data if data on another row is equal to data on current row

转载 作者:行者123 更新时间:2023-11-29 08:44:07 30 4
gpt4 key购买 nike

所以我有以下成员(member)历史表

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 查询?这只是我需要的报告的子查询,昨天、昨晚和今天我一整天都在做这个。非常感谢您的帮助。运行时间无关紧要,因为我每个月只需要运行一次。

编辑:为了获得当前的输出,我使用以下内容。 “group by 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

最佳答案

您可以在表中使用较早的记录进行自联接,然后进行聚合以查找这些较早记录的最新结束日期(这给出了上一个结束日期)。然后,必须再次将该结果连接到表中,以便找到上一条记录的 Type:

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

查看 sqlfiddle .

关于mysql : Previous Row data if data on another row is equal to data on current row,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12976002/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com