MYSQL获取最新工作编号

MYSQL获取最新工作编号,mysql,greatest-n-per-group,Mysql,Greatest N Per Group,我有这张桌子: 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-0

我有这张桌子:

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

请考虑现在返回“2015-02-06 15:0: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

更新

是的,因为我不太清楚我想要什么,我将在这里澄清:

我需要知道每个人都在做的最后一个项目


所以在我的表中,我需要知道Sebastien在表2上处理P2,David在表1上处理P4。我不想要P1,因为这不是David在上一个项目上做的最后一个项目,我还包括他现在正在做的项目。我还想排除未来的一切,因此明天的P3不能显示。

以下查询将为您提供给定姓名在给定日期的最早工作日期/时间。在下面的示例中,我假设您希望每个用户在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

所选用户maxstartdate可能重复。。。按用户分组?最新情况下,我从你的问题中了解到最晚的项目在设定的日期,你的意思是,在给定的日期/时间内,哪些工作对每个名称造成了最多的延迟?或者,您的意思是在给定的日期为每个名称找到最早的工作?您的姓名和示例拼写似乎表明您是法国人。您需要返回项目名称too@Tarik事实上,你的第一个查询运行得很好,我更改了MAX和everything seams的最小值,使其能够正常运行consideration@Tarik这是你的电话号码最后一个有效的查询:“从MyTable中选择tablenum、name、project、MAXStartDate作为日期,其中DATEDIFFstartdate,NOW=0按名称分组按tablenum描述排序;澄清你的问题将有助于我修改我的答案以满足你的需要。