我有一个名为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
可能较旧。
答案 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 BY
和LIMIT
:
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