欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 金融 > [力扣每日一练]第二天验证

[力扣每日一练]第二天验证

2025/3/12 21:22:21 来源:https://blog.csdn.net/2302_77975940/article/details/146186248  浏览:    关键词:[力扣每日一练]第二天验证

题目要求:

表: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 注册并且在第二天验证。

MySQL实现:

该题目对于两张表之间的连接没有特殊要求,之间连接并且对两个相应的时间列进行DATEDIFF函数的应用即可判定出二者之间是否相差一天

# Write your MySQL query statement below
SELECT user_id
FROM
emails E
JOIN
texts T
on E.email_id = T.email_id 
WHERE DATEDIFF(action_date,signup_date)=1 AND signup_action = 'Verified'
ORDER BY user_id ASC

panas实现:

import pandas as pddef find_second_day_signups(emails: pd.DataFrame, texts: pd.DataFrame) -> pd.DataFrame:data=emails.merge(texts,on='email_id')data['action_date'] = data['action_date'].dt.strftime('%Y-%m-%d')data['signup_date'] = data['signup_date'].dt.strftime('%Y-%m-%d')data['action_date'] = pd.to_datetime(data['action_date'])data['signup_date'] = pd.to_datetime(data['signup_date'])data['day_diff']= (data['action_date']-data['signup_date']).dt.daysresult = data.query("signup_action == 'Verified' & day_diff == 1 ")result = result.sort_values(by='user_id',ascending=True)return result[['user_id']]

python的实现方法有些复杂,首先将二者转换为年月日的字符串形式,以防止时分秒对于“一天”这个概念的干扰。然后再将这些变换过形态的字符串日期数据转换为日期形式数据,再data中建立新列,取出对应日期列相减的字符串格式天数储存到该列中,最后进行联合查询即可

本人的能力有限,甚至有些不精通,该代码可以优化的更加简洁

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词