MYSQL - MAX()返回错误的日期

时间:2017-10-27 08:52:01

标签: mysql sql max

我有一个像这样的mysql表

+----------+----------+-------------------+
| entrykey | user_key |     validfrom      |
+----------+----------+-------------------+
|        1 |        3 | 2016-4-1 0:0:0.0  |
|        2 |        3 | 2016-12-1 0:0:0.0 |
|        3 |        2 | 2016-12-1 0:0:0.0 |
|        4 |        2 | 2016-3-1 0:0:0.0  |
+----------+----------+-------------------+

现在我试图只获得validfrom是最新版本的每个用户的行。所以我正在做这样的查询:

SELECT entrykey, user_key, max(validfrom)
FROM table
Group by user_key;

几乎所有的数据都能正常工作,我在这里发布的这两个例子选择了较旧的错误行。因此,对于user_key 3,它选择entrykey 1,对于user_key 2,它选择entrykey 4。

我做错了什么?

2 个答案:

答案 0 :(得分:6)

我想validform应该是2016-03-01而不是2016-3-01,因为它在比较之前没有转换为日期。

答案 1 :(得分:1)

我完全同意接受的答案中的观点(+1)。但是,即使op以某种方式将validfrom从字符串转换为DateTime,他的尝试也不会给他想要的结果。

让我们检查一下有问题的查询:

SELECT entrykey, user_key, MAX(STR_TO_DATE(validfrom, '%Y-%c-%e')) as date1
FROM table
Group by user_key;

现在,此查询将返回user_key,其特定validfrom的最大值为user_key。但entrykey不会是entrykey最大validfrom。 (检查演示链接中的第一个结果)

为了实现上述任务,以下查询将正常工作!

SELECT t1.entrykey, t1.user_key, t2.maxdate as MaxDate
FROM t t1
inner join (select user_key,MAX(STR_TO_DATE(validfrom, '%Y-%c-%e')) as maxdate
            from t
            Group by user_key
            ) t2
on t1.user_key = t2.user_key and t1.validfrom = t2.maxdate;

Not sure if its Function App Creation issue

Click here for Demo with DateTime as datatype of validfrom

希望它有所帮助!