我知道有很多与此相关的主题。我尝试对它们进行研究,但我无法做到这一点。
我有一个以下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/