我正在尝试从一个WordPress数据库中导出一组用户信息,以导入到另一个数据库中。但是,我在弄清楚如何只为用户导出最新的会员交易方面遇到麻烦。以下查询导出每个用户的所有事务,但是我只希望事务具有最新的“ t.expires_at”值。我已经尝试过基于其他StackOverflow线程的各种子查询,但是还不太清楚。
SELECT DISTINCT
u.user_login AS user_login,
u.user_email AS user_email,
u.user_registered AS user_registered,
f.meta_value AS first_name,
l.meta_value AS last_name,
t.expires_at AS membership_enddate
FROM
wp_acfzia_users AS u
LEFT JOIN
wp_acfzia_usermeta AS f
ON u.ID = f.user_id AND f.meta_key = 'first_name'
LEFT JOIN
wp_acfzia_usermeta AS l
ON u.ID = l.user_id AND l.meta_key = 'last_name'
LEFT JOIN
wp_acfzia_mepr_transactions AS t
ON u.ID = t.user_id
答案 0 :(得分:1)
尝试这种方法
SELECT DISTINCT
u.user_login AS user_login,
u.user_email AS user_email,
u.user_registered AS user_registered,
f.meta_value AS first_name,
l.meta_value AS last_name,
t.expires_at AS membership_enddate
FROM
wp_acfzia_users AS u
LEFT JOIN
wp_acfzia_usermeta AS f
ON u.ID = f.user_id AND f.meta_key = 'first_name'
LEFT JOIN
wp_acfzia_usermeta AS l
ON u.ID = l.user_id AND l.meta_key = 'last_name'
LEFT JOIN
wp_acfzia_mepr_transactions AS t
ON u.ID = t.user_id
WHERE exists (
select 1 from tbl where tbl.user_id = t.user_id
having max(tbl.expires_at) = t.expires_at
)
或MySQL 8 +
select * from (
SELECT DISTINCT
u.user_login AS user_login,
u.user_email AS user_email,
u.user_registered AS user_registered,
f.meta_value AS first_name,
l.meta_value AS last_name,
t.expires_at AS membership_enddate,
row_number() over (order by t.expires_at partition by user_id) rn
FROM
wp_acfzia_users AS u
LEFT JOIN
wp_acfzia_usermeta AS f
ON u.ID = f.user_id AND f.meta_key = 'first_name'
LEFT JOIN
wp_acfzia_usermeta AS l
ON u.ID = l.user_id AND l.meta_key = 'last_name'
LEFT JOIN
wp_acfzia_mepr_transactions AS t
ON u.ID = t.user_id
)
Where rn = 1