我有一个用例,我想获取用户在前一天进行的最新交易,
例如。如果今天是2019年6月26日,
我想获取the last transaction made by the user on 25th June 2019 at 23:59:59
我的数据就是这样-
我不太擅长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
答案 0 :(得分:1)
您的位置接近/在正确的轨道上。对于给定的用户,您希望该用户LESS的最高交易ID高于给定的相关创建日期。一旦有了,就从交易表中获取完整的明细行。
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
我们可以加入最大交易ID,因为它只会对一个用户存在。
答案 1 :(得分:0)
您可以将ANY_VALUE
用于未聚合的列。在您的情况下,未汇总的列为new_balance
。因此,您可以使用:
SELECT MAX(transaction_id), user_id, MAX(created_date), ANY_VALUE(new_balance)
FROM transaction
where created_date < 1561507199
GROUP BY user_id;
更多详细信息here。