【问题标题】:select max datetime return wrong values选择最大日期时间返回错误值
【发布时间】:2018-05-28 15:41:33
【问题描述】:

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

我有一个以下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

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

【问题讨论】:

  • 继续。再努力一点。
  • 看看stackoverflow.com/questions/5986127/…,让您朝着正确的方向前进。
  • 尝试将MAX(date) 更改为仅date 并在最后添加ORDER BY date desc
  • 使用正确的GROUP BY。将所有非聚合列放入GROUP BY。一旦你修复它,你可能会发现你的查询出了什么问题。

标签: mysql sql max aggregate-functions


【解决方案1】:

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

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;

【讨论】:

    【解决方案2】:

    既然您有 identity (id) 列,那么您可以通过 subquerylimit 子句利用它:

    select lt.*
    from lunch_transaction lt
    where id = (select lt1.id
                from lunch_transaction lt1
                where lt.user_id = lt1.user_id
                order by date lt1.desc
                limit 1
               );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-24
      • 1970-01-01
      • 1970-01-01
      • 2022-01-03
      • 2022-07-22
      • 1970-01-01
      • 2019-11-22
      相关资源
      最近更新 更多