Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/224.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在MySql中使用GROUPBY查询未聚合的列?_Mysql_Sql - Fatal编程技术网

如何在MySql中使用GROUPBY查询未聚合的列?

如何在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_

我有一个用例,我想获取用户在前一天进行的最新交易, 如果今天是2019年6月26日, 我想获取用户于2019年6月25日23:59:59进行的最后一笔交易

我的数据是这样的-

我不擅长SQL,尝试了以下查询-


你接近/在正确的轨道上。对于给定的用户,您希望该用户的最高事务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;