2009-09-02 3 views
0

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

Поэтому, учитывая базу данных 10/10/09, 10/12/09 и 10/15/09, если кто-то входит в дату 10/13/09, он должен вернуться 10/12/09 в качестве предыдущего дату и 10/15/09 в качестве следующей даты.

Как я могу это сделать? Благодаря!

ответ

4

Вы также можете использовать это, чтобы легко вернуть всю запись, а не только дату.

-- Get previous date row 
SELECT TOP 1 OrderDate, ... FROM Table WHERE OrderDate < @MyDate ORDER BY OrderDate DESC 
-- Get Next date row 
SELECT TOP 1 OrderDate, ... FROM Table WHERE OrderDate > @MyDate ORDER BY OrderDate 

Обратите внимание, что предыдущие заказы на дату в порядке убывания, где в качестве последующих заказов по возрастанию.

+0

+1 Ударьте меня к нему. Это действительно лучший метод, потому что вы можете получить другие поля, связанные с этими датами, если это необходимо, а производительность в противном случае идентична. – harpo

+2

Вопрос помечен как _mysql_, для чего требуется 'LIMIT' вместо' TOP'. –

+0

Как вы могли бы сделать то же самое, если бы вам дали только год или только год и месяц? – Binarytales

7

Вы можете легко сделать это с помощью двух запросов:

-- get previous date 
SELECT MAX(DateField) WHERE DateField < '2009-10-13'; 
-- get next date 
SELECT MIN(DateField) WHERE DateField > '2009-10-13'; 

Если у вас есть индекс по DateField, то этот запрос также будет очень эффективным.

Смежные вопросы