Запрос SQL с выборкой уникальных значений по дате и времени создания

Есть таблица

users_com
------------
id |  user_id  |  create_datetime
1     102765    2020-01-28 9:05:11
2     102765    2020-01-28 10:05:22
3     102765    2020-01-28 11:05:55
4     104566    2020-01-28 9:05:44
5     104566    2020-01-28 12:05:52
6     104566    2020-01-28 14:05:34

Нужен запрос результатом которого станет:

   users_com.id  | users_com.user_id
        3               102765 
        6               104566 

На сервере с MySQL 5.6 конструкция ниже отрабатывает правильно, на другом MySQL 5.7.26 не работает. Я так понимаю какой-то отвечает параметр за это? Можете подсказать куда копать? Спасибо.

SELECT * FROM (
                SELECT `id` as i, `user_id` as u, `create_datetime` as d FROM `users_com`
                ORDER BY d DESC
            ) AS one
            WHERE u IN (102765, 104566)
GROUP BY u

Ответы (1 шт):

Автор решения: Akina
SELECT MAX(id) id, user_id
FROM users_com
-- WHERE user_id IN (102765, 104566)
GROUP BY users_com

Если порядок id может не соответствовать порядку create_datetime, то

SELECT DISTINCT
       FIRST_VALUE(id) OVER (PARTITION BY user_id 
                             ORDER BY create_datetime DESC) id,
       user_id
FROM users_com
-- WHERE user_id IN (102765, 104566)

То же для версии 5+

SELECT t1.id, t1.user_id
FROM users_com t1
NATURAL JOIN ( SELECT t2.user_id, MAX(t2.create_datetime) create_datetime 
               FROM users_com t2
               -- WHERE user_id IN (102765, 104566
               GROUP BY t2.user_id ) t3
-- WHERE user_id IN (102765, 104566)

PS. Надеюсь, для одного и того же user_id значения create_datetime не дублируются?

create_datetime могут дублироваться

Тогда для заявленной версии сервера 5.7.26

SELECT MAX(t1.id) id, t1.user_id
FROM users_com t1
NATURAL JOIN ( SELECT t2.user_id, MAX(t2.create_datetime) create_datetime 
               FROM users_com t2
               -- WHERE user_id IN (102765, 104566
               GROUP BY t2.user_id ) t3
-- WHERE user_id IN (102765, 104566)
GROUP BY t1.user_id
→ Ссылка