MySQL中的MAX函数不返回正确的键值

时间:2014-11-02 10:16:57

标签: mysql max

我有一个名为tbl_user_sal的表格:

| id | user_id | salary |    date    |
| 1  |    1    |  1000  | 2014-12-01 |
| 2  |    1    |  2000  | 2014-12-02 |

现在我想得到最大日期的ID。我使用了以下查询:

SELECT MAX(date) AS from_date, id, user_id, salary
FROM tbl_user_sal
WHERE user_id = 1

但它给了我这个输出:

| id | user_id | salary | from_date  |
| 1  |    1    |  2000  | 2014-12-02 |

只要最大日期为2014-12-02,哪个是正确的,但相应的ID不正确。其他记录也会发生这种情况。我用order by来检查,但那也没有成功。任何人都可以对此有所了解吗?

注意:根据我的需要,最大日期不必具有最大id。记录可以包含最长日期,但id可能较旧。

3 个答案:

答案 0 :(得分:0)

你缺少group by子试试这个:

select max(awrd_date) as from_date,awrd_id 
from tbl_user_sal 
where awrd_user_id = 106
group by awrd_id

答案 1 :(得分:0)

我认为你应该在这里做的是有一个子查询来拉取最大日期,你的外部查询会查找那个日期的行。

看起来像这样:

SELECT *
FROM myTable
WHERE date = (SELECT MAX(date) FROM myTable);

如果您要搜索特定的user_id,或者获取每个user_id的最大日期,可能需要添加其他内容,但这会在此处为此示例提供您的预期结果。

这是SQL Fiddle

答案 2 :(得分:0)

如果您只想为单个用户检索该信息(由于您的WHERE条款),请使用ORDER BYLIMIT

SELECT *
FROM tbl_user_sal
WHERE user_id = 1
ORDER BY date DESC
LIMIT 1

但是,如果你想为每个用户做到这一点,你必须得到一点点发烧友。这样的事情应该这样做:

SELECT t2.id, user_id, date
--find max date for each user_id
FROM (SELECT user_id, MAX(date) AS date
      FROM tbl_user_sal
      GROUP BY user_id) AS t1
--join ids for each max date/user_id combo
JOIN tbl_user_sal AS t2
  USING (user_id, date)
--limit to 1 id for every user_id
GROUP BY
  user_id