解决难题是学习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')
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?