简体   繁体   English

SQL:如何按最大日期分组

[英]SQL: how to group by max date

I'm pretty new to SQL, so please excuse what seems like what should be basic query. 我对SQL还是很陌生,所以请原谅应该是基本查询的东西。 I've been searching for and trying to convert other similar answer's code to make mine work, but I just can't seem to get it right. 我一直在寻找并尝试转换其他类似答案的代码以使我的工作正常,但是我似乎无法正确解决。

I have 2 tables. 我有2张桌子。 The tables are linked via a unique Employee ID(EMPLID). 这些表通过唯一的员工ID(EMPLID)链接。 Table 1(JOB) houses various job related information like title and table 2(TITLE_CHANGES) houses promotion actions, reasons, and dates. 表1(JOB)包含各种与职位相关的信息,例如标题,表2(TITLE_CHANGES)包含晋升措施,原因和日期。 I need to develop a query that returns * from both JOB and TITLE_CHANGES tables based on the most recent TITLE_CHANGES date. 我需要开发一个查询,该查询根据最近的TITLE_CHANGES日期从JOB和TITLE_CHANGES表中返回*。

FYI this does not mirror my actual table data. 仅供参考,这并不反映我的实际表数据。 I am oversimplifying it to make it easier to explain. 我过分简化了它,以便于解释。

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

Thanks for your help! 谢谢你的帮助!

Craig 克雷格

Try this query 试试这个查询

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

Try this 尝试这个

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内联接Title_Change tj在j.empid = tj.empid上按j.titledate desc排序

Select Top(1) j.empid, j.title, j.titleDate,tj.TitleChangeReason,tj.Request_Date From job j Inner join Title_Change tj On j.empId= tj.empid Order by j.TitleDate desc 选择Top(1)j.empid,j.title,j.titleDate,tj.TitleChangeReason,tj.Request_Date从作业j内加入Title_Change tj在j.empId = tj.empid上按j.TitleDate desc排序

Try this, Thanks. 试试这个,谢谢。

从JOB j,TITLE_CHANGES tc中选择j.EMPLID,j.Title,j.Title日期,标题更改原因,MAX(tc.Requested_Date),其中j.EMPLID = tc.EMPLID

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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