У меня есть таблица:GROUP_BY, MAX() и only_full_group_by
ID ACCOUNT BALANCE TIME
1 Bill 10 1478885000
2 Bill 10 1478885001
3 James 5 1478885002
4 Ann 20 1478885003
5 Ann 15 1478885004
Я хочу, чтобы получить последнюю версию (в зависимости от времени) баланс нескольких счетов. То есть:
ACCOUNT BALANCE
Bill 10
Ann 15
Я пытаюсь использовать этот SQL:
SELECT ACCOUNT, BALANCE, max(TIME)
FROM T1
WHERE ACCOUNT IN ('Bill', 'Ann')
GROUP BY ACCOUNT
Я получаю сообщение об ошибке:
1055 - Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'BALANCE' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
Я понимаю ошибку и пробовал разные SQLs, но до сих пор не понимаю, как для извлечения необходимых данных без нескольких запросов.
P.S. Я использую MySQl 5,7
@Matt Что относительно размещения на обоих? 'JOIN' быстрее, потому что производная таблица не имеет индекса –
У меня был тот же SQL, но TIME не уникален в моей таблице. Из-за логики приложения я могу иметь несколько строк с тем же временем для учетной записи. в этом случае мне нужна еще одна обертка SELECT с «group_by (ACCOUNT)» и «max (BALANCE)». Есть ли более элегантное решение? –
@VictorMezrin, если TIME может быть дублирующимся, тогда я бы использовал переменные для создания номера строки. Или, может быть, вместо времени ID будет уникальным и всегда будет представлять собой более поздний момент? – Matt