mysql - 选择最大日期时间返回错误值

标签 mysql sql max aggregate-functions

我知道有很多与此相关的主题。我尝试对它们进行研究,但我无法做到这一点。

我有一个以下lunch_transaction表:

id  |  user_id  |  date               |  due_amount  |  updated_on
---------------------------------------------------------------------------
1   |      145  | 2018-05-28 12:56:46 |   30.00      | 2018-05-28 12:56:46
2   |      134  | 2018-05-28 13:33:02 |   30.00      | 2018-05-28 13:33:02
3   |      134  | 2018-05-28 13:38:50 |   60.00      | 2018-05-28 13:38:50
4   |      134  | 2018-05-28 13:38:59 |   60.00      | 2018-05-28 13:38:59
5   |      134  | 2018-05-30 13:39:17 |   60.00      | 2018-05-28 13:39:17
6   |      145  | 2018-05-30 15:20:00 |   45.00      | 2018-05-28 15:00:17

我想获取每个用户的最新日期时间记录。

因此所需的输出应为:

145  | 2018-05-30 15:20:00 |   45.00      | 2018-05-28 15:00:17
134  | 2018-05-30 13:39:17 |   60.00      | 2018-05-28 13:39:17

但我得到以下输出:

145  | 2018-05-30 15:20:00 |   30.00      | 2018-05-28 12:56:46
134  | 2018-05-30 13:39:17 |   30.00      | 2018-05-28 13:33:02

即使列值也不位于同一行,即结果集中的字段值似乎是来自不同行的混合。

这是我的查询:

SELECT user_id, MAX(date), due_amount, updated_on 
FROM lunch_transaction 
GROUP BY user_id

要实现所需的输出,正确的查询应该是什么?

最佳答案

您当前的查询处于正确的轨道上,但要使该方法发挥作用,您需要将原始表加入其中,以过滤掉每个用户非最大记录的任何记录:

SELECT t1.*
FROM lunch_transaction t1
INNER JOIN
(
    SELECT user_id, MAX(date) AS max_date
    FROM lunch_transaction 
    GROUP BY user_id
) t2
    ON t1.user_id = t2.user_id AND t1.date = t2.max_date;

关于mysql - 选择最大日期时间返回错误值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50569739/

相关文章:

mysql - 如何调用常用的 MySQL 查询

mysql - 使用 LEFT JOIN 从多个表中进行选择

mysql - SQL : Count the number of occurrences occuring on output column and calculate some percentage based on the occurences

java - 需要帮助确定最大和最小用户输入

c# - 如何在 visual studio 中为我的程序设置最大内存限制?

python - 发现字典中的最大值

javascript - 将 bool 字符串查询传递给 Django

php - laravel mysql 显示表

Php 简单错误

SQL 回退行?