mysql - SQL查询查找每个user_id的最大id

标签 mysql sql

我目前正在从 4 个不同的表中查询,

用户memberships_usersmembership_levelsphone_area_code

users表中,我想选择

id
user_login,
user_email,
display_name

memberships_users 表包含 user_id 列和 id 列。 user_id 列不唯一,并且有很多重复的用户 ID。

memberships_users表中,我想选择

initial_payment,
billing_amount,
cycle_period,
cycle_number,

从每个 user_id 具有最大 id 的行开始

name 来自 membership_levels 表和

phone_area_code 表中的meta_value

这一切都应该与users表中的ID相关

最佳答案

这基本上是获得你想要的东西的一种方法的伪代码。

首先,根据成员资格表创建每个 user_id 和 max(id) 的派生表。这将产生与成员资格中关联的最大 id 对齐的所有不同的 user_id。下一步是将两个物理表与派生表连接起来,以获取用户和关联的成员资格记录,其中包含最大成员资格 ID。

注意:如果您的memberships_users 表较大,那么将max_membership_id 数据放入临时表并添加适当的索引将获得更好的性能。

;WITH max_membership_id AS
(
    SELECT user_id, max_id = MAX(id)
    FROM memberships_users
    GROUP BY user_id            
)
SELECT 
    u.id, u.user_login, u.user_email, u.display_name,
    mu.initial_payment, mu.billing_amount, mu.cycle_period, mu.cycle_number
FROM
    users u
    INNER JOIN max_membership_id mmi ON mmi.user_id = u.user_id
    INNER JOIN memberships_users mu ON mu.id = mmi.max_id

关于mysql - SQL查询查找每个user_id的最大id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59516433/

相关文章:

Mysql Workbench 不读取通过 JDBC 插入的记录

sql - 无法在 Redshift 上将 JOIN 与generate_series 一起使用

sql - 如何从表 (Oracle) 中获取具有给定 rowid 列表 IN STRING 的记录?

mysql - 在 SSIS 中无法看到 "Microsoft OLE DB Provider for ODBC"驱动程序

java - JDBC DriverManager 在尝试连接数据库之前检测用户是否在网络上?

php - 将代码片段插入数据库并在文本区域中以相同方式显示

mysql - 我是否需要使用约束来制作 sql 表才能与 hibernate 一起使用

mysql - 编写查询来计算平均收入但错误地得到一组?

MySQL SELECT 一切都变成一个大字符串(列和行)

mysql - 唯一键与候选键/ super 键 (MySQL)