在单行和另一列中显示相同的记录

时间:2018-10-07 19:42:47

标签: mysql

我有这种格式的数据

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

1 个答案:

答案 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 |
+--------+---------------------+---------------------+