Как получить предпоследнюю дату, дифференцирующую день, но без учета времени - PullRequest
0 голосов
/ 12 апреля 2019

У меня проблема; Я хочу получить предпоследнюю дату без учета времени. Это мой запрос:

select max_date,
       (select max(t2.date) from table t2 where t2.date<t1.max_date)
from (select max(max_date) from table) as t1;

мои данные:

2018-06-12 10:43:45.000,
2018-06-12 10:42:45.000,
2018-06-12 10:41:45.000,
2018-05-12 10:43:45.000,

Я сейчас получаю:

2018-06-12 10:43:45.000,
2018-06-12 10:42:45.000,

но я хочу:

2018-06-12 10:43:45.000,
2018-05-12 10:43:45.000

1 Ответ

1 голос
/ 12 апреля 2019

Обновление

Этот запрос будет работать на 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...