php - 从多个值中选择最高值

标签 php mysql sql subquery

我有这张 table

反式

id
user_id
amt
desc
bal
created

示例数据为

id  user_id desc    amt     bal     created
1   1   credit  12.00   12.00   2013-07-02 00:00:00
2   1   credit  44.00   56.00   2013-07-09 00:00:00
3   1   debit   11.00   45.00   2013-07-18 00:00:00
4   2   credit  11.00   11.00   2013-07-12 01:17:08
5   2   credit  45.00   56.00   2013-07-13 01:17:08
6   2   debit   15.00   41.00   2013-07-14 01:17:08
7   3   credit  33.00   33.00   2013-07-15 01:17:52
8   3   credit  45.00   78.00   2013-07-16 01:17:52
9   3   debit   25.00   53.00   2013-07-17 01:17:52

现在我需要只选择每个用户的当前余额,所以输出应该是 输出 id user_id desc amt bal 已创建 3 1 借方 11.00 45.00 2013-07-18 00:00:00 6 2 借方 15.00 41.00 2013-07-12 01:17:08 9 3 积分 25.00 53.00 2013-07-12 01:17:52

这是我尝试过的

SELECT * 
FROM trans
WHERE created
IN (

SELECT MAX( created ) 
FROM trans
GROUP BY user_id
)

这为每个用户提供了两条记录,而不是每条记录。我做错了什么?

目标是选择最高金额(最高和降序)<​​/strong>

如果两个日期和时间相同也可以,但不能分别返回两条记录

最佳答案

如果您使用 JOIN,我发现这会更简单:

SELECT t.*
FROM trans t
   INNER JOIN (
       SELECT Max(Id) MaxId
       FROM trans
       GROUP BY User_Id
   ) t2 ON t.Id = t2.MaxId

这假设 MAX(Id) 是您要查找的每个用户的最大记录(并且是唯一的)。如果没有,您可以以相同的方式将 MAX(created)User_Id 结合使用,但如果时间相同,则每个用户可能会产生多个结果。例如:

SELECT t.*
FROM trans t
   INNER JOIN (
       SELECT Max(created) MaxCreated, User_Id
       FROM trans
       GROUP BY User_Id
   ) t2 ON t.User_Id = t2.User_Id AND t.Created = t2.MaxCreated

关于php - 从多个值中选择最高值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17606005/

相关文章:

mysql - GROUP BY 子句必须与聚合函数一起使用?

php - 使用主键和复选框使用 PDO、PHP 和 MYSQL 删除语句

php - 尝试使用 PHP header ("Location: ") 函数进行重定向

mysql - 结果集必须在分组中 - MYSQL

SQL 数据库重构工具

sql - 写入备份和恢复数据库的过程出错

php - 设置在子页面 Wordpress 上隐藏标题的条件

javascript - 如何在php中发送get请求并接收json数据

php - 阻止 javascript 被执行

php - 从本地主机上的 pagodabox 中断安装 laravel 4