2016-11-03 3 views
1

У меня есть таблица, как показано нижеMYSQL получить все результаты дня меньше заданного значения

Eid joinDate 

1 01-01-2016 
2 01-01-2016 
3 28-02-2016 
4 28-02-2016 
5 28-02-2016 
6 15-02-2016 
7 15-02-2016 

Я хочу, чтобы получить все результаты последней даты, которая имеет данные.

например: если я дам «28-02-2016» в качестве входных данных, то результаты должны быть

3 28-02-2016 
4 28-02-2016 
5 28-02-2016 

Если я дам «18-02-2016» в качестве входных данных в этих результатах должно быть

1 15-02-2016 
2 15-02-2016(Most recent from 18-02-2016) 

Я пробовал с нижеследующим запросом, но он возвращает только один результат.

select Eid,max(joinDate) from Employee where joinDate<='18-02-2016' 

Но этот запрос не возвращает все результаты. Также, если я буду использовать группу, то он вернет все результаты менее 18-02-2016

Есть ли другой способ достижения этого, пожалуйста, предложите.

+0

группу по какому полю? и у вас есть миллисекунды или секунды в метке времени? – kosa

+0

Я не понимаю первый столбец вашего результирующего набора. И этот вопрос ничтожен по моему мнению. См. Http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple-sql-query – Strawberry

ответ

1

Вы можете сделать это с помощью LEFT JOIN:

SELECT t1.Eid, t1.joinDate 
FROM Employee AS t1 
LEFT JOIN Employee AS t2 ON t2.joinDate > t1.joinDate AND t2.joinDate <= '2016-02-16' 
WHERE t1.joinDate <= '2016-02-16' AND t2.Eid IS NULL 

Demo here

0

Вы можете сделать это в MySQL с помощью подзапроса в предложении WHERE:

select e.* 
from employees e 
where e.joindate = (select max(e2.joindate) 
        from employees e2 
        where e2.joindate <= '2016-02-28' 
        ); 
Смежные вопросы