Как вытащить самую последнюю дату в прошлом в SQL - PullRequest
0 голосов
/ 13 июня 2018

Я ищу SQL-запрос, который отображает самую последнюю дату в прошлом.Например, у меня есть следующие столбцы:

CLIENT          DATE
1234567890      2017-01-01
1234567890      2018-05-17
1234567890      2018-05-18
1234567890      2018-09-18

Желаемый вывод:

6173282305      2018-05-18

Я пробовал комбинации getdate () и MAX () безрезультатно.Любая помощь будет оценена.Спасибо всем.

Ответы [ 4 ]

0 голосов
/ 14 июня 2018

Вы не указали диалект SQL.Вот несколько методов, которые можно использовать с SQL Server.

Метод A

Сначала выберите две самые последние записи, а из них выберите самую старую запись:

/* from the two most recent records, choose the oldest */
SELECT TOP 1
  [Client], [Date]
FROM (
      /* choose the two most recent records */
      SELECT TOP 2
        [Client], [Date]
      FROM [TableName]
      ORDER BY [Date] DESC) x
ORDER BY [Date] ASC

Ссылка на SQLСкрипка: http://sqlfiddle.com/#!18/38054/2

Метод B

Найдите наибольшее значение даты и укажите фильтр для выбора всех записей с датами, меньшими, чем эта.Из этой группы выберите самую последнюю дату:

SELECT TOP 1
  [Client], [Date]
FROM [TableName]
WHERE [Date] < (SELECT MAX([Date]) FROM [TableName])
ORDER BY [Date] Desc

Ссылка на SQL Fiddle: http://sqlfiddle.com/#!18/38054/6

0 голосов
/ 13 июня 2018
select max(date) from t group by client having max(date) < getdate()
0 голосов
/ 13 июня 2018

Вы можете использовать функцию Windows и cte, например:

С cte as (Выберите клиент, Date, Row_number () over (разделить по порядку клиента по дате desc) как date_count From [tableName])

Выберите * из cte, где date_count = 1

Этот синтаксис row_number может быть немного неправильным, но он должен дать вам представление.

0 голосов
/ 13 июня 2018

Вы можете использовать order by и fetch first:

select t.*
from t
where t.date < current_date
order by t.date desc
fetch first 1 row only;

По сути, это стандартный синтаксис ANSI.Некоторые базы данных предпочитают от limit или top до fetch first.Некоторые предпочитают getdate() или sysdate или что-то еще для текущей даты.Но логика та же самая, даже если синтаксис немного меняется.

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