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