MYSQL 获取最新职位编号

MYSQL get latest job number

我有这个table:

TableNumber(Int 0 to 25)|Name(varchar 100)|Project(varchar 15)|StartDate(Datetime)
1                       |David            |P1                 |'2015-02-06 08:00:00'    
2                       |Sebastien        |P2                 |'2015-02-06 08:00:00'    
1                       |David            |P4                 |'2015-02-06 12:00:00'    
2                       |Sebastien        |P3                 |'2015-02-07 08:00:00'

我希望在规定的日期为每个人找到最新的工作。

我想要:

TableNumber(Int 0 to 25)|Name(varchar 100)|Project(varchar 15)|StartDate(Datetime)    
2                       |Sebastien        |P2                 |'2015-02-06 08:00:00'    
1                       |David            |P4                 |'2015-02-06 12:00:00'   

所以我想排除 P3,因为它不是“2015-02-06”,我想排除 P1,因为它不是 David 的最新工作(它的 P4)。

请考虑以下示例中的 NOW() returns '2015-02-06 15:00:00'。

这是我尝试过的:

SELECT * FROM MyTable WHERE DATEDIFF(startdate, NOW()) = 0 ORDER BY tablenum DESC;

但这只排除了P3

所以我尝试了这个:

SELECT * FROM MyTable AS p WHERE DATEDIFF(p.startdate, NOW()) = 0 AND TIMEDIFF(p.startdate, NOW()) = (SELECT MAX(TIMEDIFF(p2.startdate, NOW())) FROM MyTable AS p2 WHERE p2.startdate = p.startdate) ORDER BY tablenum DESC;

但还是不排除P1

有人知道我是怎么做到的吗?顺便说一句,开始日期将始终是一个小时(08:00:00 或 12:00:00 或 22:00:00...)

更新

是的,因为不是很清楚我想要什么,我会在这里澄清一下:

我需要知道每个人的最后一个项目。

所以在我的 table 中,我需要知道 Sebastien 在 table 2 号的 P2 上工作,而 David 在 table 1 号上的 P4 上工作。我不想P1 因为它不是 David 从事的最后一个项目(上一个项目我还包括他现在正在从事的项目)。我也想排除以后的一切所以P3(明天是谁)一定不能显示。

以下查询将为您提供给定名称在给定日期的最早工作的 date/time。在下面的示例中,我假设您想要每个用户在 2015-02-06 的最早工作。

SELECT Name, min(StartDate)
FROM MyTable
WHERE StartDate >= '2015-02-06'
  AND StartDate < '2015-02-07'
GROUP BY Name

使用上面的查询,你可以很容易地得到最终的解决方案:

SELECT t1.project, t2.name, t2.StartDate
FROM MyTable t1 INNER JOIN
   (SELECT Name, min(StartDate)
FROM MyTable
WHERE StartDate >= '2015-02-06'
  AND StartDate < '2015-02-07'
GROUP BY Name) t2 ON t1.Name = t2.Name AND t1.StartDate = t2.StartDate