2015-02-06 3 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' 

Поэтому я хочу, чтобы исключить Р3, так как его не «2015-02-06», и я хочу, чтобы исключить 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.

Кто-нибудь знает, как я мог это достичь? КСТАТИ StartDate всегда будет круглый час (08:00:00 или 12:00:00 или 22:00:00 ...)

UPDATE

Да, так как это было не очень понятно, что Я хотел бы уточнить здесь:

Мне нужно знать, какой последний проект работал на каждого человека.

поэтому в моей таблице мне нужно знать, что Себастьян работает над P2 на таблице номер 2 и что Дэвид работает на P4 на таблице номер 1. Мне не нужен P1, потому что это не последний проект, над которым работал Дэвид (по в последнем проекте я также включил проект, над которым он сейчас работает). Я также хочу исключить все в будущем, поэтому P3 (кто завтра) не должен отображать.

+0

возможно дубликат [SQL выбрать только строки с максимальным значением на колонке] (http://stackoverflow.com/ вопросы/7745609/sql-select-only-rows-with-max-value-on-a-column) –

+0

'select user, max (startdate) ... group by user?? –

+0

По последним данным, я понял «самый поздний» проект (из контекста вашего вопроса) – Tarik

ответ

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

Вам также нужно вернуть название проекта –

+0

@SasankaPanguluri См. Обновленный ответ. – Tarik

+1

@Tarik Ну, на самом деле ваш первый запрос работал просто отлично, я изменил MIN для MAX и все швы нормально работали – Sebastien

Смежные вопросы