Skip to content

Latest commit

 

History

History
135 lines (101 loc) · 3.45 KB

File metadata and controls

135 lines (101 loc) · 3.45 KB
comments difficulty edit_url tags
true
简单
数据库

English Version

题目描述

表:emails

+-------------+----------+
| Column Name | Type     | 
+-------------+----------+
| email_id    | int      |
| user_id     | int      |
| signup_date | datetime |
+-------------+----------+
(email_id, user_id) 是这张表的主键(有不同值的列的组合)。
这张表的每一行包含 email ID,user ID 和注册日期。

表:texts

+---------------+----------+
| Column Name   | Type     | 
+---------------+----------+
| text_id       | int      |
| email_id      | int      |
| signup_action | enum     |
| action_date   | datetime |
+---------------+----------+
(text_id, email_id) 是这张表的主键(有不同值的列的组合)。
signup_action 是 ('Verified', 'Not Verified') 的枚举类型。
这张表的每一行包含 text ID,email ID,注册操作和操作日期。

编写一个解决方案来找到 第二天验证注册 的用户 ID。

返回结果表以 user_id 升序 排序。

结果格式如下所示。

 

示例:

输入:

emails 表:

+----------+---------+---------------------+
| email_id | user_id | signup_date         |
+----------+---------+---------------------+
| 125      | 7771    | 2022-06-14 09:30:00|
| 433      | 1052    | 2022-07-09 08:15:00|
| 234      | 7005    | 2022-08-20 10:00:00|
+----------+---------+---------------------+

texts 表:

+---------+----------+--------------+---------------------+
| text_id | email_id | signup_action| action_date         |
+---------+----------+--------------+---------------------+
| 1       | 125      | Verified     | 2022-06-15 08:30:00|
| 2       | 433      | Not Verified | 2022-07-10 10:45:00|
| 4       | 234      | Verified     | 2022-08-21 09:30:00|
+---------+----------+--------------+---------------------+
    

输出:

+---------+
| user_id |
+---------+
| 7005    |
| 7771    |
+---------+

解释:

  • user_id 为 7005 的用户在 2022-08-20 10:00:00 注册并且在第二天验证。
  • user_id 为 7771 的用户在 2022-06-14 09:30:00 注册并且在第二天验证。

解法

方法一:双表关联

我们可以通过内连接两个表,然后根据 DATEDIFF 函数计算出注册日期和操作日期的差值是否等于 1,以及注册操作是否为 Verified,来筛选出满足条件的用户 ID。

MySQL

# Write your MySQL query statement below
SELECT user_id
FROM
    Emails AS e
    JOIN texts AS t
        ON e.email_id = t.email_id
        AND DATEDIFF(action_date, signup_date) = 1
        AND signup_action = 'Verified'
ORDER BY 1;