如何使用 SQL 和 Python 连接两个具有日期条件的表?
Posted
技术标签:
【中文标题】如何使用 SQL 和 Python 连接两个具有日期条件的表?【英文标题】:How to join two tables with dates conditions with SQL and Python? 【发布时间】:2021-04-12 23:16:18 【问题描述】:我有一个 SQL 数据库,有两个名为 users 和 user_activities 的表(见下文)。我正在尝试从带有 id_user 的查询中获取数据框,以及用户在注册第二天后进行的会话数。为了识别会话,我们在 user_activities 表中有活动“会话”。
为此,我需要合并两个表。第一个,users,提供 user_id 和 registration_date:
用户表:
user_id | registration_date |
---|---|
1 | 2021-01-10 04:37:14 |
1 | 2021-01-10 10:37:24 |
2 | 2021-01-10 20:37:44 |
3 | 2021-01-10 20:10:14 |
2 | 2021-01-10 10:37:04 |
另一个,user_activities,跟踪每个用户进行的所有活动:
user_activities 表
user | activity | date |
---|---|---|
1 | session | 2021-01-10 04:37:14 |
1 | mainPage | 2021-01-10 10:37:24 |
2 | session | 2021-01-10 20:37:44 |
3 | session | 2021-01-10 20:10:14 |
4 | session | 2021-01-11 00:02:04 |
2 | session | 2021-01-12 00:03:04 |
4 | session | 2021-01-13 00:31:04 |
5 | session | 2021-01-14 20:23:04 |
2 | session | 2021-01-15 10:36:52 |
2 | mainPage | 2021-01-15 10:37:04 |
我想要得到什么
我想获得一个包含 user_id 和 会话数 的 df,在他们注册的第二天之后进行。只有会话数超过 0 的用户才会包含在该 df 中。如下:
user_id | n_sessions |
---|---|
2 | 2 |
4 | 1 |
5 | 1 |
为了获取每个用户的会话数,我之前做过:
import mysql.connector
import pandas as pd
mydb = mysql.connector.connect(host="localhost", user="root", password="", database="users")
mycursor = mydb.cursor()
#sesiones por usuario
mycursor.execute("SELECT user_id, COUNT(*) FROM user_activities WHERE name = 'session' GROUP BY user_id;")
sessions_per_user = pd.DataFrame(mycursor, columns=['user_id','n_sessions'])
但我不知道如何加入 registration_date 条件。有人知道怎么做吗?
【问题讨论】:
【参考方案1】:这是join
和group by
。像这样的:
SELECT u.user_id, COUNT(*)
FROM users u JOIN
user_activities ua
on ua.user = u.user_id
WHERE ua.name = 'session' AND
ua.date > u.registration_date + interval 1 day
GROUP BY u.user_id;
我不确定您所说的“注册第二天之后的会话数”到底是什么意思。这将其解释为“注册后至少 24 小时”。可以针对其他定义调整逻辑。
根据您的评论,您希望:
ua.date > date(u.registration_date) + interval 2 day
【讨论】:
是的……“注册第二天之后的会话数。”意思是如果有人在10号注册,我想看12号之后的会话数。我认为您的解决方案已经可以在间隔天 2 而不是 1 的情况下做到这一点以上是关于如何使用 SQL 和 Python 连接两个具有日期条件的表?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Hibernate Criteria 连接两个具有 OneToMany 关系的表