查询MySQL期间失去连接

时间:2018-11-16 07:00:51

标签: mysql database-connection

我对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;

或者当我尝试创建视图或创建临时表时。

此外,当我在自己的笔记本电脑上尝试代码时,没有收到错误消息。

我的问题是:

  1. 为什么在使用测试笔记本电脑时出现错误消息?我尝试了Google的错误消息,我想那是因为我的查询运行时间太长,并且超过了笔记本电脑的MySQL版本所允许的时间限制。我猜想谁设置测试只需要一些有效的代码?
  2. 有没有一种方法可以改善我的代码,使其仍然可以在这种情况下运行?

谢谢!

1 个答案:

答案 0 :(得分:0)

尝试

新版本的MySQL WorkBench具有更改特定超时的选项。

For me it was under Edit → Preferences → SQL Editor → DBMS connection read time out (in seconds): 600

参考:here