我目前正在从 4 个不同的表中查询,
用户
、memberships_users
、membership_levels
、phone_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/