[面试SQL试题]查询出在半个小时内通话多次(2次及以上)的用户id
程序员文章站
2022-05-14 21:21:11
...
这是最近一次面试,遇到的试题之一。后来开机对该题做了复现,记录如下。
有一张记录了用户通话时间的表records,共三个字段:call_day,call_time, user_id,分别为通话日期,通话时间,用户id。
写出SQL语句,查询出在半个小时内通话多次(2次及以上)的用户id。
字段 | 类型 |
---|---|
call_day (通话日期) | date |
call_time (通话时间) | time |
user_id(用户id) | int |
1、在MySQL创建表records
CREATE TABLE records
(
call_day date NOT NULL,
call_time time NOT NULL,
user_id int NOT NULL
);
2、插入数据
INSERT INTO records VALUES('2020-2-13', '11:24:23', 2234);
INSERT INTO records VALUES('2020-2-13', '13:26:23', 2235);
INSERT INTO records VALUES('2020-2-13', '11:14:24', 2263);
INSERT INTO records VALUES('2020-2-13', '11:44:24', 2263);
INSERT INTO records VALUES('2020-2-13', '11:25:23', 2263);
INSERT INTO records VALUES('2020-2-14', '12:32:23', 2236);
INSERT INTO records VALUES('2020-2-14', '10:42:23', 2237);
INSERT INTO records VALUES('2020-2-14', '11:52:23', 2293);
INSERT INTO records VALUES('2020-2-15', '12:26:23', 2283);
INSERT INTO records VALUES('2020-2-16', '14:32:23', 2633);
INSERT INTO records VALUES('2020-2-17', '14:23:23', 2243);
INSERT INTO records VALUES('2020-2-17', '14:27:23', 2263);
INSERT INTO records VALUES('2020-2-17', '13:29:23', 2633);
INSERT INTO records VALUES('2020-2-17', '17:24:23', 2833);
INSERT INTO records VALUES('2020-2-18', '10:25:23', 2563);
INSERT INTO records VALUES('2020-2-18', '18:42:23', 2893);
INSERT INTO records VALUES('2020-2-18', '18:44:24', 2893);
INSERT INTO records VALUES('2020-2-20', '10:26:23', 2233);
INSERT INTO records VALUES('2020-2-20', '10:12:45', 2233);
INSERT INTO records VALUES('2020-2-20', '10:43:51', 2233);
INSERT INTO records VALUES('2020-2-21', '11:22:23', 2232);
INSERT INTO records VALUES('2020-2-21', '11:32:23', 2232);
INSERT INTO records VALUES('2020-2-21', '11:12:23', 2232);
3、自连接
SELECT a.call_day,
a.user_id,
a.call_time as t1,
b.call_time as t2
FROM records a LEFT JOIN records b
ON a.call_day = b.call_day AND a.user_id = b.user_id
WHERE a.call_time > b.call_time;
4、计算时间差
SELECT a.call_day,
a.user_id,
a.call_time as t1,
b.call_time as t2,
(a.call_time - b.call_time) AS t1_t2
FROM records a LEFT JOIN records b
ON a.call_day = b.call_day AND a.user_id = b.user_id
WHERE a.call_time > b.call_time;
5、查询半小时内的记录
SELECT a.call_day,
a.user_id,
a.call_time as t1,
b.call_time as t2,
(a.call_time - b.call_time) AS t1_t2
FROM records a LEFT JOIN records b
ON a.call_day = b.call_day AND a.user_id = b.user_id
WHERE (a.call_time - b.call_time) > 0 AND (a.call_time - b.call_time) < 3000;
上一篇: python爬取新浪财经的股票信息