Получить только самую последнюю транзакцию MySQL - PullRequest
0 голосов
/ 04 февраля 2019

Я пытаюсь экспортировать набор пользовательских данных из одной базы данных 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

1 Ответ

0 голосов
/ 04 февраля 2019

Попробуйте этот подход

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
...