如何在MySql中使用GROUPBY查询未聚合的列?
我有一个用例,我想获取用户在前一天进行的最新交易, 如果今天是2019年6月26日, 我想获取用户于2019年6月25日23:59:59进行的最后一笔交易 我的数据是这样的- 我不擅长SQL,尝试了以下查询-如何在MySql中使用GROUPBY查询未聚合的列?,mysql,sql,Mysql,Sql,我有一个用例,我想获取用户在前一天进行的最新交易, 如果今天是2019年6月26日, 我想获取用户于2019年6月25日23:59:59进行的最后一笔交易 我的数据是这样的- 我不擅长SQL,尝试了以下查询- 你接近/在正确的轨道上。对于给定的用户,您希望该用户的最高事务ID小于给定的相关创建日期。一旦你有了它,然后从transactions表中获取完整的细节行 select T2.* from ( select user_id, max( transaction_
你接近/在正确的轨道上。对于给定的用户,您希望该用户的最高事务ID小于给定的相关创建日期。一旦你有了它,然后从transactions表中获取完整的细节行
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上加入,因为它只会为一个用户存在。您可以对非聚合列使用任何值。在您的情况下,非聚合列是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;
更多详细信息。嘿,想知道如何计算T2的总和。新的余额?或者我需要保留此查询的结果集并计算变量的总和吗?@AniruddhaRaje,NewBalance的总和没有意义,除非您希望根据所有用户的上一笔交易(如上文所述)计算所有用户截至给定日期的余额。你想在什么样的背景下得到这样的答案?实际上,从你查询的结果集中,我还想计算T2.new_余额的总和,以便计算当天所有用户的总余额。
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
SELECT MAX(transaction_id), user_id, MAX(created_date), ANY_VALUE(new_balance)
FROM transaction
where created_date < 1561507199
GROUP BY user_id;