我在employees
表中有3个字段:personal_id
,personal_id_type
和date_registered
。
我需要找到所有行,每行personal_id + personal_id_type
一行(这里是我认为可以使用GROUP的地方),但因为同一personal_id + personal_id_type
可能有很多条目(因为员工可以退出并稍后再次雇用),我只需要获取最新的条目(order by date_registered DESC
)。
这在概念上是否正确?按2个字段分组的语法是什么?我能实现我的需要吗?
编辑:对不起,实际上有很多字段,所以我需要最新的一行,而不仅仅是最新的日期。
答案 0 :(得分:3)
听起来你想要的是:
select personal_id, personal_id_type, max(date_registered)
from employees
group by personal_id, personal_id_type
从概念上讲,您不是按日期排序,因为每个personal_id / personal_id_type组合只返回一个。由于您使用GROUP BY,因此使用聚合函数来选择MAX日期。
答案 1 :(得分:2)
SELECT
personal_id,
personal_id_type,
MAX(date_registered) AS latest_date_registered
FROM
Employees E
GROUP BY
personal_id,
personal_id_type
如果您需要其他列,则需要在问题中添加更多详细信息。
答案 2 :(得分:2)
在子查询中查找每个(personal_id, personal_id_type)
组合的最新日期,然后加入原始表:
SELECT
e.*
FROM
employees e
JOIN
( SELECT
personal_id
, personal_id_type
, MAX(date_registered) AS latest_date_registered
FROM
employees
GROUP BY
personal_id
, personal_id_type
) AS grp
ON grp.personal_id = e.personal_id
AND grp.personal_id_type = e.personal_id_type
AND grp.latest_date_registered = e.date_registered
答案 3 :(得分:0)
SELECT personal_id, personal_id_type, MAX(date_registered)
FROM employees
GROUP BY personal_id, personal_id_type
ORDER BY MAX(date_registered) DESC
答案 4 :(得分:0)
这是聚合函数变得有用的地方。您将按personal_id
和personal_id_type
分组,然后使用MAX(date_registered)
选择最新日期。请记住,您必须按所有非聚合列进行分组。
答案 5 :(得分:0)
是的,这是正确的:
SELECT
personal_id,
personal_id_type,
MAX(date_registered) AS latest_date
FROM
employees
GROUP BY
personal_id,
personal_id_type
ORDER BY
MAX(date_registered) DESC