我有这样的示例数据:
ID Val Name Dt Status
1, 145, 'Test1', '2020-01-28 02:18:00', 'open'
2, 145, 'Test1', '2020-01-28 04:10:00', 'open'
3, 145, 'Test1', '2020-01-28 05:50:00', 'open'
4, 145, 'Test1', '2020-01-28 05:56:00', 'close'
5, 145, 'Test2', '2020-01-28 07:36:00', 'open'
6, 145, 'Test2', '2020-01-28 07:42:00', 'open'
7, 145, 'Test2', '2020-01-28 07:44:00', 'open'
8, 145, 'Test2', '2020-01-28 07:47:00', 'close'
我如何获得这样的输出:
ID Val Name o_Dt o_gate c_Dt c_gate
1, 145, 'Test1', '2020-01-28 02:18:00', 'open' NULL NULL
2, 145, 'Test1', '2020-01-28 04:10:00', 'open' NULL NULL
3, 145, 'Test1', '2020-01-28 05:50:00', 'open' '2020-01-28 05:56:00', 'close'
4, 145, 'Test2', '2020-01-28 07:36:00', 'open' NULL NULL
5, 145, 'Test2', '2020-01-28 07:42:00', 'open' NULL NULL
6, 145, 'Test2', '2020-01-28 07:44:00', 'open' '2020-01-28 07:47:00', 'close'
我尝试过不同的情况,但没有继续使用
COALESCE(LAG(Status)OVER(按dt排序)] >>
ROW_NUMBER()OVER(PARTITION BY vehicle_id,status)
没有得到确切的结果。任何人都可以对此提出建议。
以前我曾问过相同数据的问题,但没有确切答案。
How to transpose rows to columns based on time intervals in MYSQL
我有这样的示例数据:ID Val Name Dt Status 1,145,'Test1','2020-01-28 02:18:00','open'2,145,'Test1','2020-01 -28 04:10:00','open'3,145,'...
SELECT t1.ID, t1.Val, t1.Name, t1.Dt o_Dt, t1.Status o_gate, t2.Dt c_Dt, t2.Status c_gate
FROM test t1
LEFT JOIN test t2 ON t1.Dt < t2.Dt
AND t1.Name = t2.Name
AND t2.Status = 'close'
AND NOT EXISTS ( SELECT NULL
FROM test t3
WHERE t1.Dt < t3.Dt
AND t3.Dt < t2.Dt
AND t1.Name = t3.Name)
WHERE t1.Status = 'open'
请尝试以下代码