我对sql还很陌生,最近进行了一次sql测试。在测试中,我得到了一台笔记本电脑,并被要求解决mysql中的一些sql问题。测试数据是一个数据集,记录每个用户何时登录到一个网站,看起来是这样的(我得到的数据集比这个大得多):
CREATE TABLE table1 (id INT, login TIMESTAMP);
INSERT INTO table1 (id, login) VALUES
(1,'2018-11-01 00:00:01'),
(1,'2018-11-02 11:00:01'),
(1,'2018-11-03 13:00:01'),
(1,'2018-11-04 15:00:01'),
(1,'2018-11-05 17:00:01'),
(2,'2018-10-01 00:00:01'),
(2,'2018-10-11 10:00:01'),
(2,'2018-10-17 09:00:01'),
(2,'2018-11-11 08:00:01'),
(3,'2018-09-03 14:00:01'),
(3,'2018-09-04 15:00:01'),
(3,'2018-09-04 16:00:01'),
(3,'2018-09-06 18:00:01'),
(3,'2018-09-06 19:00:01'),
(3,'2018-09-06 20:00:01'),
(3,'2018-09-13 04:00:01'),
(3,'2018-09-13 14:00:01'),
(3,'2018-09-23 14:00:01'),
(4,'2018-10-03 11:00:01'),
(4,'2018-11-03 12:00:01'),
(5,'2018-09-01 08:00:01'),
(5,'2018-09-02 09:00:01'),
(5,'2018-09-12 09:00:01'),
(5,'2018-09-22 10:00:01'),
(5,'2018-09-22 19:00:01'),
(6,'2018-10-15 06:00:01'),
(6,'2018-10-18 09:00:01'),
(6,'2018-10-18 10:00:01'),
(6,'2018-10-18 11:00:01'),
(6,'2018-10-19 12:00:01');
我需要计算出用户第一次访问和随后每次访问之间的天数差异。结果表应如下所示:
id、首次就诊日期、当前就诊、首次就诊与当前就诊的差异
我写了以下代码:
SELECT t1.id, t1.first_time, t2.login AS cur_time, DATEDIFF(t2.login, t1.first_time) AS diff
FROM
(SELECT id, min(login) as first_time
FROM table1
GROUP BY id) t1 JOIN table1 t2
ON t1.id=t2.id;
当我试图使用提供的笔记本电脑运行代码时,我收到一条错误消息,上面写着“查询过程中失去连接”。
但我在运行其他代码时没有遇到问题,比如:
SELECT id, min(login) as first_time
FROM table1
GROUP BY id;
但是,即使对于这样一些简单的代码,我也收到了相同的错误消息:
SELECT *
FROM
(SELECT id, min(login) as first_time
FROM table1
GROUP BY id) t1;
或者当我试图创建视图或创建临时表时。
另外,当我在自己的笔记本电脑上尝试代码时,我没有收到错误消息。
我的问题是:
为什么我在使用测试笔记本电脑时会收到错误消息?我试着用google搜索错误信息,我想这是因为我的查询运行时间太长,超过了mysql版本笔记本允许的时间限制。我猜不管是谁设置的测试只需要一些有效的代码?
有没有一种方法可以改进我的代码,使它仍然可以在这样的情况下运行?
谢谢您!
1条答案
按热度按时间wmvff8tz1#
试试这个
新版本的mysql workbench可以选择更改特定的超时。
参考:这里