lzp1127774265

2021-02-10   阅读量: 3867

Mysql

SQL语句运行报错

-- QUESTION3: You're interviewing at a large social media company and are given two tables: registrations and logins. Each table consists of a user id and a date timestamp of the event. Each user has only one registration entry but could have multiple login entries (or none). The question is to write a query that will give the number of times each user login within their first week of registration (including none).

CREATE TABLE registration ([user_id] char(1), [registration_date] date)

INSERT INTO registration ([user_id], [registration_date])

VALUES ('1','2020-01-15')

,('2','2020-02-01')

,('3','2020-03-10')

,('4','2020-04-07')

,('5','2020-05-25')

;

CREATE TABLE logins ([user_id] char(1), [login_date] date)

INSERT INTO logins ([user_id], [login_date])

VALUES ('1','2020-01-17')

,('1','2020-01-19')

,('1','2020-01-20')

,('1','2020-01-25')

,('2','2020-02-01')

,('2','2020-02-05')

,('2','2020-02-08')

,('4','2020-04-08')

,('4','2020-04-09')

,('4','2020-04-10')

,('4','2020-04-15')

,('4','2020-04-20')

,('5','2020-05-31')

,('5','2020-06-05')

;

答案:

SELECT a.user_id,COUNT(a.user_id)

FROM logins a,registration b

WHERE a.user_id=b.user_id

AND a.login_date <DATE_ADD(b.registration_date, INTERVAL 7 DAY)

GROUP BY a.user_id

报错: “7”附近的语法错误。


想知道哪里错了, 具体的正确语句该如何写?


添加CDA认证专家【维克多阿涛】,微信号:【cdashijiazhuang】,提供数据分析指导及CDA考试秘籍。已助千人通过CDA数字化人才认证。欢迎交流,共同成长!
200.0000 1 4 关注作者 收藏

评论(4)

hunter.Z
2021-02-18
在SQL server 中使用DATEADD函数来实现 DATE_ADD的功能
其用法如下:
DATEADD(datepart,number,date)
datepart 参数表示number对应date中的哪部分,是年、还是月、还是日,还是时,还是分。。。。
number 是您希望添加的间隔数;对于未来的时间,此数是正数,对于过去的时间,此数是负数。
date 参数是合法的日期表达式。

datepart参数填写方式如下:
年    yy, yyyy    
季度    qq, q    
月    mm, m    
年中的日    dy, y    
日    dd, d    
周    wk, ww    
星期    dw, w    
小时    hh    
分钟    mi, n    
秒    ss, s    
毫秒    ms    
微妙    mcs    
纳秒    ns
266.8927 1 0 回复
nwdjy2008
2021-02-18

select registration.user_id,ifnull(t.num,'none') as number

from registration left join

(SELECT a.user_id,COUNT(a.user_id) as num

FROM logins a,registration b

WHERE a.user_id=b.user_id

AND a.login_date <DATE_ADD(b.registration_date, INTERVAL 7 DAY)

GROUP BY a.user_id) as t

on registration.user_id = t.user_id;


按照你的思路,函数名变了也不对,因为没有考虑none的情况,需要再嵌套一层查询,把none的用户id找出来赋值。

266.8927 1 0 回复
ermutuxia
2021-02-18

都是差不多的数据库,语法也比较接近,但是也只是比较接近,不是完全一样,包含基本语法和函数都有一些区别

0.0000 0 0 回复
ermutuxia
2021-02-10

这个是sql server的题目哦

0.0000 0 0 回复
lzp1127774265
2021-02-12

老师, 按理来说SQL Sever与My SQL不是没有太大区别么

0.0000 0 0 回复

推荐课程