【发布时间】:2018-11-16 15:04:49
【问题描述】:
我对 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;
或者当我尝试创建视图或创建临时表时。
另外,当我在自己的笔记本电脑上尝试代码时,我没有收到错误消息。
我的问题是:
- 为什么我在使用测试笔记本电脑时收到错误消息?我尝试用谷歌搜索错误消息,我猜这是因为我的查询运行时间太长,并且超过了该笔记本电脑的 MySQL 版本允许的时间限制。我猜设置测试的人只想要一些高效的代码?
- 有什么方法可以改进我的代码,使其在这种情况下仍然可以运行?
谢谢!
【问题讨论】: