2015-11-24 1 views
1

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

Что я хочу видеть, сколько дней было между порядком 1 и 2, а сколько дней между 2 и 3 и так далее.

select OrderID, OrderDate, RankOrder 
from Orders 

Некоторые примеры данных будут:

Order 1 -> 01/01/2015 -> 1 
Order 2 -> 03/01/2015 -> 2 
Order 3 -> 10/01/2015 -> 3 

Я хочу результаты, чтобы иметь дополнительный столбец с количеством дней:

Order 1 -> 01/01/2015 -> 1 -> 2 
Order 2 -> 03/01/2015 -> 2 -> 7 
Order 3 -> 10/01/2015 -> 3 -> 0 

Последний заказ был бы, вероятно, выглядеть на текущую дату для разработки датиффа.

+4

Тег dbms используемый продукт. Когда дело доходит до даты/времени, слишком много продуктов далеки от соответствия ANSI SQL. – jarlh

+0

Возможный дубликат [SQL DateDiff расширенного использования?] (Http://stackoverflow.com/questions/593898/sql-datediff-advanced-usage) – davejal

+0

Этот вопрос действительно не выглядел так, как будто редактирование говорит, что они просто использовали Превосходно в конце концов. Может быть, вам придется подумать о другом способе этого, я пытаюсь выработать последовательные блоки, но выходные меня вызывают проблемы. Это была просто упрощенная версия того, что я пытался сделать. – user3691566

ответ

1

Поскольку у вас есть функция ранжирования, это всего лишь соединение с арифметикой даты. Использование datediff() функции SQL Server, это выглядит следующим образом:

select o.*, 
     datediff(day, o.OrderDate, 
       coalesce(onext.OrderDate, getdate()) as diff 
from orders o left join 
    orders onext 
    on o.rankorder = onext.rankorder - 1; 

Дата арифметика зависит от базы данных.

+0

Его швы настолько очевидны, что теперь я видел ответ, просто попробовал это, и он отлично работал. благодаря – user3691566