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描述排序;澄清你的问题将有助于我修改我的答案以满足你的需要。