Mysql SQL:如何按最大日期分组

Mysql SQL:如何按最大日期分组,mysql,Mysql,我对SQL非常陌生,所以请原谅什么是基本查询。我一直在寻找并试图转换其他类似答案的代码,以使我的工作,但我似乎不能得到它的权利 我有两张桌子。这些表通过唯一的员工ID(EMPLID)链接。表1(职务)包含各种职务相关信息,如职务,表2(职务变更)包含晋升行动、原因和日期。我需要开发一个查询,根据最近的TITLE_更改日期从JOB和TITLE_CHANGES表返回* 仅供参考,这不反映我的实际表格数据。我把它简单化了,以便更容易解释 It should return: EMLPID |

我对SQL非常陌生,所以请原谅什么是基本查询。我一直在寻找并试图转换其他类似答案的代码,以使我的工作,但我似乎不能得到它的权利

我有两张桌子。这些表通过唯一的员工ID(EMPLID)链接。表1(职务)包含各种职务相关信息,如职务,表2(职务变更)包含晋升行动、原因和日期。我需要开发一个查询,根据最近的TITLE_更改日期从JOB和TITLE_CHANGES表返回*

仅供参考,这不反映我的实际表格数据。我把它简单化了,以便更容易解释

It should return:

EMLPID |     TITLE    |TitleDate   |TitleChnageReason|Requested_Date

12345  |  Specialist 2| 02/01/2015|      Merit       |01/31/2015

JOB table    
  EMPLID    |         Title       | Title Date  
---------+---------------+----------------+  
 12345      |  Specialist 2       | 02/01/2015       
--------+----------------+----------------  
 12345      |  Specialist 1       | 09/01/2014  
--------+----------------+----------------  
 44576      |  Analyst 3          | 05/01/2015  
--------+----------------+----------------  
 44576      |  Analyst 2          | 03/01/2014  
--------+---------------------+-----------  

TITLE_CHANGES Table

  EMPLID    | Title change reason | Requested_Date  
------------+---------------------+----------------+  
 12345      |  Merit              | 01/31/2015  
------------+---------------------+----------------  
 12345      |  Newhire            | 08/30/2014  
------------+---------------------+----------------  
 44576      |  Promotion          | 04/30/2015  
------------+---------------------+----------------  
 44576      |  Newhire            | 02/28/2014  
------------+---------------------+----------------  
谢谢你的帮助

克雷格

试试这个查询

SELECT j.EMPLID, 
SUBSTRING_INDEX(GROUP_CONCAT(j.TITLE ORDER BY j.TitleDate DESC),',',1) AS title,
SUBSTRING_INDEX(GROUP_CONCAT(j.TitleDate ORDER BY j.TitleDate DESC),',',1) AS title_date, 
SUBSTRING_INDEX(GROUP_CONCAT(tc.TitleChnageReason ORDER BY tc.Requested_Date DESC),',',1) AS title_change_reson,
SUBSTRING_INDEX(GROUP_CONCAT(tc.Requested_Date ORDER BY tc.Requested_Date DESC),',',1) AS request_date,
FROM JOB j
JOIN TITLE_CHANGES tc ON(tc.EMPLID = j.EMPLID)
GROUP BY j.EMPLID
试试这个

SELECT j.emplid AS 'EMPLID', j.title AS 'TITLE', j.title_date AS 'TitleDate', e.reason AS 'TitleChangeReason', q.requested_date AS 'Requested_Date'
FROM
    job j
    INNER JOIN
    (SELECT a.* 
        FROM title_changes a
        INNER JOIN (SELECT emplid, MAX(requested_date) as rd FROM title_changes GROUP BY 1) b 
        ON a.emplid=b.emplid AND a.requested_date=b.rd) 
    e ON j.emplid=e.emplid

从作业j中选择j.EMPLID、j.Title、j.Title日期、标题更改原因、最大(tc.请求的日期)、标题更改tc,其中j.EMPLID=tc.EMPLID

选择* 来自job j 内部连接标题\u更改tj 关于j.empid=tj.empid 按j.titledate说明排序

选择顶部(1)j.empid、j.title、j.titledate、tj.TitleChangeReason、tj.Request\u日期 来自job j 内部连接标题\u更改tj 关于j.empId=tj.empId 由j.TitleDate desc订购

试试这个,
谢谢。

举一个你尝试过的例子-这是一个相当普通的任务。所以你的真实数据使用日期数据类型?@ChrisL我不能真正显示SQL,因为实际的表字段比我给出的简化版本复杂得多。@草莓,是的,日期字段是“日期”数据类型。这是我最初的数据类型。问题是,此查询返回所有EMPLID条目并将它们按顺序排列。我只需要JOB表中的1个条目,该条目对应于每个员工的TITLE_CHANGES表中的最新条目。