我有一个面试问题是这样的:
表User
有列:
user_id ,
name ,
phone_num
表UserHistory
有列:
user_id ,
date ,
action
编写一个SQL查询,返回在过去30天内登录过的任何用户的姓名,电话号码和最近的日期(如果UserHistory
中的action字段设置为"logged_on",则可以告诉用户已经登录)。
我是一个SQL新手,我写了一个查询如下:
SELECT *
INTO #temp
FROM (SELECT user_id
FROM User
JOIN User_History ON user.user_id = User_History.user_id)
WHERE
MAX(DATEDIFF(day, date, getdate()) BETWEEN 1 AND 30
SELECT
u.Name, u.phone_number
FROM
#temp t
JOIN
User u ON u.user_id = t.user_ID
我没有提供表格的数据,有人能看一下并给出一些见解吗?
更简单的版本应该是:
SELECT u.name, u.phone_num, MAX(date) as MostRecentLogon
FROM user u
JOIN UserHistory uh on u.user_id = uh.user_id
WHERE uh.action = "logged_on"
AND uh.date >= DATEADD(d, -30, GETDATE())
GROUP BY u.name, u.phone_num