您当前的位置: 首页 >  sql

寒冰屋

暂无认证

  • 2浏览

    0关注

    2286博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

连接与子查询SQL谜题

寒冰屋 发布时间:2022-07-29 18:45:00 ,浏览量:2

解决难题是学习SQL的好方法。在这个谜题中,我们将学习连接与子查询。

在许多查询中,您可以替换连接和子查询。然而,既然每个人都有自己的优势,那么这样做并不明智。一旦你解决了这个难题,你就会看到连接与子查询的一些优点和缺点。

解决难题是学习SQL的好方法。没有什么比练习你所学的更重要的了。一旦你弄清楚了这个谜题,请在评论中发布你的答案,以便我们大家互相学习。

SQL谜题——连接与子查询

系统管理员想要一份活跃用户的报告。您能否编写一份报告,返回自2017年3月14日以来30天内登录的任何用户的姓名、电话号码和最近日期?

(如果UserHistory中的action字段设置为“Logged On” ,您可以告诉用户已登录)。

User

  • userID
  • name
  • phoneNumber

UserHistory

  • userID
  • actionDate
  • action

每次用户登录时,都会在UserHistory表中插入一个新行,其中包含userID、当前日期和操作(其中action = “Logged On”)。

问题 #1 – 在不使用子查询的情况下编写SQL查询。

问题 #2 – 使用子查询编写SQL。

在回答问题时,请考虑联接与子查询的区别。哪种技术更适合解决问题?你能看到这两种情况的优势吗?

为了让您开始,请下载此脚本,其中包含表定义和一些测试数据。

对问题 #1 的回答——内部连接

像我写的大多数查询一样,我一步一步地完成了这个。让我通过引导您完成我的思考过程来向您展示我的意思。

不管这个查询结果如何,我知道我必须弄清楚如何在2017年3月14日之后的30天内获得登录信息。为此,我编写了一个简单的查询,该查询使用该DATEDIFF函数计算从actionDate到14日的天数。如果天数小于或等于30,我知道条目在窗口内。

SELECT *,
       DATEDIFF(DAY, actionDate, '2017-03-14')
FROM   @UserHistory
WHERE  action = 'Logged On'
       AND DATEDIFF(DAY, actionDate, '2017-03-14')             
关注
打赏
1665926880
查看更多评论
0.0488s