#mysql #max #mysql-5.6
Вопрос:
Я использую Navicat MySQL в качестве своего клиента с MySQL 5.6. Рассмотрим следующую воображаемую таблицу списков изменений пользователей, которую мы назовем [user_changelog].
идентификатор пользователя | поле | старое значение | новое значение | Дата | Имя пользователя |
---|---|---|---|---|---|
2133 | Адрес | 101 Главная улица | 202 Дуэт Лейн | 2021-05-06 | Пользователь1 |
2133 | Город | Таунсвилл | Окраина города | 2021-05-06 | Пользователь1 |
2133 | Государство | Аль | около | 2021-05-06 | Пользователь1 |
2133 | застежка-молния | 12334 | 90210 | 2021-05-06 | Пользователь1 |
2133 | Максимальное Количество Заказов | 10 | 15 | 2021-05-06 | Менеджер 1 |
1100 | Государство | Техас | Мэриленд | 2021-04-30 | Пользователь1 |
1100 | название компании | ЛамеКо | CoolCo | 2021-04-30 | Пользователь1 |
2133 | Максимальное Количество Заказов | нулевой | 10 | 2021-04-25 | Пользователь1 |
1100 | Максимальное Количество Заказов | нулевой | 10 | 2021-04-14 | Менеджер 2 |
Из этой таблицы мне нужно вернуть только строки для последнего изменения определенной точки данных для всех пользователей. Например, последнее изменение Максимального значения заказов для каждого уникального пользователя, отсортированное в порядке убывания по дате изменения.
Мой ожидаемый возвращаемый набор данных из таблицы [user_changelog] должен быть:
идентификатор пользователя | поле | старое значение | новое значение | Дата | Имя пользователя |
---|---|---|---|---|---|
2133 | Максимальное Количество Заказов | 10 | 15 | 2021-05-06 | Менеджер 1 |
1100 | Максимальное Количество Заказов | нулевой | 10 | 2021-04-14 | Менеджер 2 |
Этот запрос возвращает последние 500 изменений максимального значения заказов:
SELECT
cl.user_id
, cl.field
, cl.old_value
, cl.new_value
, cl.date
, cl.username
FROM user_changelog AS cl
WHERE cl.field = 'Max Orders'
ORDER BY cl.date DESC
LIMIT 500
…but if I try to limit the results by modifying cl.date
to MAX(cl.date)
in the SELECT statement, I of course get only a single row with the most recent date
value, which I understand, but the other returned columns aren’t even from the same record.
I understand I need to use a sub-query here. But I’m struggling with that. I’ve tried this substitute WHERE clause for the above query, but it seems to run forever and never returns a result:
WHERE cl.date = (SELECT MAX(d1.date) FROM user_changelog AS d1 WHERE d1.user_id = cl.user_id)
Я не уверен, где я ошибаюсь на данный момент. ТИА за любую помощь!
В/Р Пол