我有这种格式的数据
userid date time
1 2018-09-04 07:23:00
1 2018-09-05 06:24:00
1 2018-09-06 09:23:00
1 2018-09-06 06:15:00
1 2018-09-07 09:16:24
1 2018-09-07 06:22:00
我们如何通过mysql查询以以下格式显示数据?
必需的输出:
userid date time1 time2
1 2018-09-04 07:23:00 NULL
1 2018-09-05 06:24:00 NULL
1 2018-09-06 09:23:00 06:15:00
1 2018-09-07 09:16:00 06:22:00
答案 0 :(得分:0)
这不是很漂亮,它对您的数据集做了一些假设,但这是一个主意...
DROP TABLE IF EXISTS my_table;
CREATE TABLE my_table
(userid INT NOT NULL
,dt DATETIME NOT NULL
,PRIMARY KEY(userid,dt)
);
INSERT INTO my_table VALUES
(1,'2018-09-04 07:23:00'),
(1,'2018-09-05 06:24:00'),
(1,'2018-09-06 09:23:00'),
(1,'2018-09-06 06:15:00'),
(1,'2018-09-07 09:16:24'),
(1,'2018-09-07 06:22:00');
SELECT x.userid
, MIN(x.dt) x_dt
, y.dt y_dt
FROM my_table x
LEFT
JOIN my_table y
ON y.userid = x.userid
AND DATE(y.dt) = DATE(x.dt)
AND y.dt > x.dt
GROUP
BY DATE(x.dt);
+--------+---------------------+---------------------+
| userid | x_dt | y_dt |
+--------+---------------------+---------------------+
| 1 | 2018-09-04 07:23:00 | NULL |
| 1 | 2018-09-05 06:24:00 | NULL |
| 1 | 2018-09-06 06:15:00 | 2018-09-06 09:23:00 |
| 1 | 2018-09-07 06:22:00 | 2018-09-07 09:16:24 |
+--------+---------------------+---------------------+