2015-02-06 38 views
2

我有這個表:MYSQL獲得最新的就業數字

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' 

所以我想排除,因爲它不是「2015年2月6日」 P3和我想排除P1導致其不是最新的工作爲大衛(其P4 )。

請考慮NOW()在以下示例中返回'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。

任何人都知道我能做到這一點嗎? BTW開始日期將永遠是一個圓形小時(08:00:00或12:00:00或22:00:00 ...)

UPDATE

是的,因爲它不是很清楚什麼我想我會在這裏澄清:

我需要知道每個人工作的最後一個項目。

所以在我的表中,我需要知道Sebastien在第2號表上的P2上工作,David在P4表上工作。我不想P1,因爲它不是大衛工作的最後一個項目(由最後一個項目我還包括他現在正在開發的項目)。我也想排除未來的一切,因此P3(明天是誰)不得顯示。

+0

[SQL選擇只在色譜柱的最高值的行(可能重複http://stackoverflow.com/問題/ 7745609/sql-select-only-rows-with-max-value-on-a-column) – 2015-02-06 20:51:44

+0

'select user,max(startdate)... group by user'? – 2015-02-06 20:51:49

+0

最近,我瞭解了「最遲」的項目(從您的問題的上下文中) – Tarik 2015-02-06 21:10:09

回答

3

以下查詢將爲您提供給定日期的給定名稱的最早作業的日期/時間。在下面的例子中,我假設你想要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 
+0

您還需要返回項目名稱 – 2015-02-06 20:57:25

+0

@SasankaPanguluri查看更新的答案。 – Tarik 2015-02-06 21:06:49

+1

@Tarik實際上你的第一個查詢工作得很好我改變了MIN for MAX,並且所有接縫都正常工作 – Sebastien 2015-02-06 21:07:29