[英]How to group by 2 fields and order by date at the same time?
我在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个字段分组的语法是什么? 我会满足我的需求吗?
编辑:很抱歉,实际上有很多字段,所以我需要最新的行,而不仅仅是最新的日期。
听起来您想要的是:
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日期。
SELECT
personal_id,
personal_id_type,
MAX(date_registered) AS latest_date_registered
FROM
Employees E
GROUP BY
personal_id,
personal_id_type
如果需要其他列,则需要在问题中添加更多详细信息。
在子查询中找到每个(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
SELECT personal_id, personal_id_type, MAX(date_registered)
FROM employees
GROUP BY personal_id, personal_id_type
ORDER BY MAX(date_registered) DESC
这是聚合函数变得有用的地方。 您将按personal_id
和personal_id_type
分组,然后使用MAX(date_registered)
选择最新日期。 请记住,您必须按所有非聚合列进行分组。
对,那是正确的:
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.