繁体   English   中英

如何按2个字段分组并同时按日期排序?

[英]How to group by 2 fields and order by date at the same time?

我在employees表中有3个字段: personal_idpersonal_id_typedate_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_idpersonal_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM