Как в MySQL выбрать записи, у которых последняя дата меньше заданного времени?

Доброго времени суток.
Есть таблица с заказами. Условные поля: id, phone, created_at
Значит нужно сделать такую выборку из этой таблицы, что бы в нее попали записи, последняя дата которых (created_at), меньше заданной в условии. ВАЖНО, что записи могу иметь одинаковые поля phone
Пример:
Допустим условие created_at < 20.10.2017
Нужно выбрать все телефонные номера, у которых последняя дата меньше той которая задана в условии.
Пробовал такое:
SELECT * FROM `order` WHERE `created_at` < (SELECT MAX(`created_at`) FROM `order` WHERE `created_at` <= '20-10-2017')

Но этот вариант выбирает последнюю дату до 20.10.2017. А нужно что бы последняя дата выбиралась из всего списка.
И это значит если есть две записи с одним телефоном и у одной из них дата 25.10.2017, а у другой 18.10.2017, то телефон все равно попадет в выборку. А нужно что бы не попал, потому что крайняя запись имеет дату больше той, что у условии.
Надеюсь понятно объяснял.
Скажите вообще возможно такое или нет?
  • Вопрос задан
  • 3280 просмотров
Пригласить эксперта
Ответы на вопрос 4
@nozzy
Symfony, Laravel, SQL
Не проверял:
select 
t1.id,
t1.phone,
t1.created_at,
t2.last_date
from table t1
join
(
 select
 phone,
 max(created_at) as last_date
 from table
 group by phone
) t2 on t2.phone = t1.phone
where t2.last_date <= ....
Ответ написан
ThunderCat
@ThunderCat Куратор тега MySQL
{PHP, MySql, HTML, JS, CSS} developer
group by + order by
Ответ написан
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
SELECT `phone`
  FROM `table`
  GROUP BY `phone`
  HAVING MAX(`created_at`) < :maxDate
Ответ написан
Alexeytur
@Alexeytur
SELECT * FROM t1 o1 WHERE o1.created_at < 
  (
  SELECT MAX(o2.created_at) FROM t1 o2 
  WHERE o1.phone = o2.phone and o2.created_at < '20.10.2017'
  )
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы