Обновление
Этот запрос будет работать на SQL Server:
SELECT max_date,
(SELECT MAX(t2.date)
FROM test t2
WHERE CONVERT(DATE, t2.date) < CONVERT(DATE, t1.max_date)) AS penultimate_date
FROM (SELECT MAX(date) AS max_date
FROM test) t1
Единственным отличием является использование CONVERT
для преобразования значения DATETIME
в DATE
, а не DATE
, который является только функцией MySQL.
Демонстрация на dbfiddle.uk
Оригинальный ответ (MySQL, поскольку вопрос был только помечен sql
в то время)
Проблема с вашим запросом состоит в том, что вы сравниваете дату как полную временную метку, а не просто просматриваете часть даты. Вот почему вы получаете предыдущее значение в тот же день, а не в предыдущий день. Измените запрос на этот:
SELECT max_date,
(SELECT MAX(t2.date)
FROM test t2
WHERE DATE(t2.date) < DATE(t1.max_date)) AS penultimate_date
FROM (SELECT MAX(date) AS max_date
FROM test) t1;
Выход:
max_date penultimate_date
2018-06-12 10:43:45 2018-05-12 10:43:45
Демонстрация на dbfiddle