Как запросить неагрегированный столбец, используя group by в MySql? - PullRequest
0 голосов
/ 26 июня 2019

У меня есть сценарий использования, в котором я хочу получить последнюю транзакцию, совершенную пользователем в предыдущий день,
Например.Если сегодня 26 июня 2019 года,
Я хочу получить the last transaction made by the user on 25th June 2019 at 23:59:59

Мои данные такие -

enter image description here

Я плохо разбираюсь в SQL и попробовал следующий запрос -

SELECT MAX(transaction_id), user_id, MAX(created_date), new_balance  
FROM transaction
where created_date < 1561507199 
GROUP BY user_id;

Я получаю следующую ошибку-

Error Code: 1055. Expression #4 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'transaction.new_balance' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

1 Ответ

1 голос
/ 26 июня 2019

Вы были близки / на правильном пути. Для данного пользователя вы хотите, чтобы для этого пользователя был указан наименьший идентификатор транзакции, чем указанная дата создания. Получив это, возьмите полную строку детализации из таблицы транзакций.

select
      T2.*
   from
      ( select user_id, max( transaction_id ) maxTransID
           from transaction
           where created_date < 1561507199
           group by user_id ) Tmp
         JOIN Transaction T2
            on Tmp.MaxTransID = T2.Transaction_ID

Мы можем присоединиться к максимальному идентификатору транзакции, потому что он будет существовать только для одного пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...