Sql 拉取与列的最大值关联的行值
我们有两个要联接的表,一个是用户表,另一个是订阅表 Users表存储列,如 •用户ID •名称 •电子邮件 •账户创建日期 每次新用户加入时,都会向该表中添加一个新行 订阅表故事列,如 •订阅ID •用户ID •订阅创建于 •订阅截止日期为 •订阅状态 每次用户重新订阅时,都会添加一个新行。继续现有订阅不会创建新行 我们的目标是创建一个返回以下列的查询 •用户ID •电子邮件 •账户创建日期 •订阅状态(活动/取消/空) 但是,当我们尝试执行下面的查询时,它会为具有多个订阅的创建者返回多行Sql 拉取与列的最大值关联的行值,sql,Sql,我们有两个要联接的表,一个是用户表,另一个是订阅表 Users表存储列,如 •用户ID •名称 •电子邮件 •账户创建日期 每次新用户加入时,都会向该表中添加一个新行 订阅表故事列,如 •订阅ID •用户ID •订阅创建于 •订阅截止日期为 •订阅状态 每次用户重新订阅时,都会添加一个新行。继续现有订阅不会创建新行 我们的目标是创建一个返回以下列的查询 •用户ID •电子邮件 •账户创建日期 •订阅状态(活动/取消/空) 但是,当我们尝试执行下面的查询时,它会为具有多个订阅的创建者返回多行 S
SELECT
u.user_id,
u.email,
u.account_create_date
s.subscription_status
FROM
users as u
INNER JOIN
subscriptions as s
on s.user_id = u.user_id
我们如何编写一个查询,从中提取在日期创建的最大订阅的订阅状态?我将这样做。不确定这是否是最好的方式 加入在日期创建的用户ID和最大订阅的子查询,并使用该子查询仅筛选这些结果
SELECT
u.user_id,
u.email,
u.account_create_date
s.subscription_status
FROM
users as u
INNER JOIN
subscriptions as s
on s.user_id = u.user_id
INNER JOIN
(SELECT s.user_id,
MAX(s.subscription_created_at) AS subscription_created_at
FROM subscriptions
GROUP BY s.user_id) max_s
ON max_s.user_id = s.user_id
WHERE s.subscription_created_at = max_s.subscription_created_at
常用的方法是使用窗口函数:
SELECT u.user_id, u.email, u.account_create_date
s.subscription_status
FROM users u JOIN
(SELECT s.*,
ROW_NUMBER() OVER (PARTITION BY s.user_id ORDER BY s.created_at DESC) as seqnum
FROM subscriptions s
) s
ON s.user_id = u.user_id AND s.seqnum = 1;
用您正在使用的数据库标记您的问题。