我有一個表: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
我理解的錯誤,並嘗試了不同的sql語句,但還是不明白如何無需多次查詢即可檢索所需數據。
P.S.我使用MySQL 5.7
@Matt怎麼樣放在兩個? 'JOIN'更快,因爲派生表沒有索引 –
我有相同的SQL,但TIME在我的表中不是唯一的。由於應用程序的邏輯,我可以有多個行,具有相同的TIME帳戶。在這種情況下,我需要一個包含'group_by(ACCOUNT)'和'max(BALANCE)'的包裝SELECT。是否有更優雅的解決方案? –
@VictorMezrin如果TIME可以重複,那麼我會使用變量來創建一個行號。或者,也許而不是時間ID將是唯一的,並且總是代表以後的時間? – Matt