@mustafo

Как получить последнюю запись для каждого значения определённого поля?

Есть таблица balances:

account_id;
date;
balance;

Хочу получить для каждого account_id последнюю запись.

Следующий запрос выдаёт ошибку:
SELECT account_id, max(date), balance
FROM account_balances GROUP BY account_id;


Текст ошибки:
[42000][1055] Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'core.account_balances.balance' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by


Я понимаю, что я запрашиваю неаггрегированое поле, но как мне иначе получить последний баланс каждого счета?

Версия mysql: 5.7.11

Настройки дефолтные. После установки ничего не менял.
  • Вопрос задан
  • 30294 просмотра
Решения вопроса 1
@mustafo Автор вопроса
SELECT * FROM account_balances AS ab
WHERE date =
  (SELECT MAX(date) FROM account_balances AS ab2 WHERE ab.account_id = ab2.account_id) AND
ORDER BY ab.account_id
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
@dmitryKovalskiy
программист средней руки
А из чего у вас ключ таблицы состоит? На мой взгляд у вас здесь архитектурная погрешность.
Предположим что из id и даты. Тогда есть примерно такое решение
CREATE TEMPORARY TABLE t1 (select account_id,MAX(date) as date from t2 GROUP BY account_id);

SELECT account_id,date,balance FROM table3 as t3
INNER JOIN t1 ON t1.account_id = t3.account_id AND t1.date = t3.date
Ответ написан
Комментировать
vbaydikov
@vbaydikov
у тебя select account_id, max(date), balance ..
а группировка только по account_id. (с такой группировкой по одному account_id надо к balance надо применить какую то агр функцию, например max(), тогда запустится, но результат будет не такой как ты хочешь =) )

вот так сделай:

select 
	ad.*, 
	ab.balance 
from
(
	select
		account_id, max(date) as max_date
	from tmp_account_balance
	group by account_id
) ad
inner join tmp_account_balance ab on ad.account_id = ab.account_id and ab.date = ad.max_date;
Ответ написан
Комментировать
R0dger
@R0dger
Laravel/Yii/2 AngularJs PHP RESTful API
MySQL какой? и какие стоят настройки? там в 5.7 много чего наворотили...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы