LesleyJill
LesleyJill

Reputation: 111

When a column has multiple values per user how do I select the most recent one according to date in another column?

Below is the query which works fine however Status column can have several values per user and I only want the row with the most recent date. This is in another column called modified in the wp_memberships_users table. I'm new to Mysql - I'm thinking maybe max on the modified column but unsure how to achieve this

This runs but lists some users multiple times with many values for status - I only want the most recent

SELECT 
    e.user_id,
    e.status,
    m1.meta_value as fname,
    m2.meta_value as lname,
    m3.meta_value as company
FROM
    wp_memberships_users e
LEFT JOIN wp_usermeta  m ON e.user_ID = m.user_id AND m.meta_key = '1'
LEFT JOIN wp_usermeta m1 ON e.user_ID = m1.user_id AND m1.meta_key LIKE 'first_name'
LEFT JOIN wp_usermeta m2 ON e.user_ID = m2.user_id AND m2.meta_key LIKE 'last_name' 
LEFT JOIN wp_usermeta m3 ON e.user_ID = m3.user_id AND m3.meta_key LIKE 'company_name' 
WHERE
    e.status = "active" OR e.status = 'expired'

I tried this but still returns multiple status for each user

SELECT 
    e.user_id,
    e.status, 
    e.modified,
    m1.meta_value as fname,
    m2.meta_value as lname,
    m3.meta_value as company
FROM
    wp_memberships_users e
LEFT JOIN wp_usermeta  m ON e.user_ID = m.user_id AND m.meta_key = '1'
LEFT JOIN wp_usermeta m1 ON e.user_ID = m1.user_id AND m1.meta_key LIKE 'first_name'
LEFT JOIN wp_usermeta m2 ON e.user_ID = m2.user_id AND m2.meta_key LIKE 'last_name' 
LEFT JOIN wp_usermeta m3 ON e.user_ID = m3.user_id AND m3.meta_key LIKE 'company_name' 
WHERE
    (e.user_id, e.modified) IN (SELECT e.user_id, MAX (e.modified)
                            FROM wp__memberships_users
                            GROUP BY e.user_id)

Upvotes: 1

Views: 25

Answers (0)

Related Questions