2015-09-30 82 views
0

我很新的SQL,所以请原谅什么似乎应该是基本查询。我一直在寻找并尝试转换其他类似答案的代码,以使我的工作,但我似乎无法做到正确。SQL:如何按最大日期分组

我有2个表。这些表通过唯一的员工ID(EMPLID)链接。表1(工作)包含各种与工作有关的信息,如标题和表2(TITLE_CHANGES),提供促销活动,原因和日期。我需要根据最近的TITLE_CHANGES日期开发一个从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 
------------+---------------------+---------------- 

感谢您的帮助!

克雷格

+0

显示你已经尝试过的一个例子 - 这是一个相当通用的任务。 –

+0

所以你的真实数据使用日期数据类型? – Strawberry

+0

@ChrisL我无法真正显示SQL,因为实际的表字段比我给出的简化版本复杂得多。 –

回答

0

尝试此查询

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 
0

试试这个

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 
-1

选择j.EMPLID,j.Title,j.Title日期,名称变更原因,MAX(TC。 Requested_Date)from JOB j,TITLE_CHANGES tc其中j.EMPLID = tc.EMPLID

0

选择* F ROM工作j INNER JOIN Title_Change tj的 在j.empid = tj.empid 订购j.titledate倒序

+0

这就是我最初的想法。问题是这个查询返回所有的EMPLID条目并且按顺序放置它们。我只需要JOB表中的1个条目,与每个员工的TITLE_CHANGES表中的最新最近条目相对应。 –

0

选择顶层(1)j.empid,j.title,j.titleDate,tj.TitleChangeReason,TJ .Request_Date 从工作j INNER JOIN Title_Change tj的 在j.empId = tj.empid 订购j.TitleDate倒序

试试这个, 感谢。