2016-07-15 3 views
0

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

Итак, в моем желаемом результате свинцовой датой будет сегодняшняя дата (она равна нулю в текущем запросе результатов, не упорядоченном). В настоящее время, в его нынешнем виде, последний зарегистрированный инцидент был 5/12/2016, так что это означало бы, что разница между последним записанным инцидентом и сегодняшней датой составляет примерно 63 дня.

Использование SQL Server

Запрос:

Select 
convert(varchar, CLL.Call_Log_Date, 101) as [CreatedDate], 
convert(varchar, Lead(CLL.Call_Log_Date, 1) 
      Over (Order by CLL.Call_Log_Date DESC), 101) as [Lead], 
DATEDIFF(dd, Lead(CLL.Call_Log_Date, 1) 
      Over (Order by CLL.Call_Log_Date DESC), CLL.Call_Log_Date) as [DIFF] 
From VMWareSM_Test.dbo.RV_CALL as CLL 
Where CLL.IPK_Status_Ref = '1' 
And CLL.Call_Priority_Ref IN (6,7) 
Order by [DIFF] DESC; 

Результат

CreatedDate   Lead    DIFF 
06/24/2015   05/12/2015   43 
11/20/2015   10/09/2015   42 
05/13/2016   04/08/2016   35 
10/09/2015   09/14/2015   25 
01/13/2015   12/23/2014   21 
12/22/2014   12/03/2014   19 
01/08/2016   12/21/2015   18 
03/02/2015   02/12/2015   18 
08/23/2015   08/07/2015   16 
04/08/2016   03/25/2016   14 
+0

просто используйте 'GETDATE()'. Также, пожалуйста, всегда указывайте явную длину при преобразовании в varchar: 'CONVERT (VARCHAR (10), CLL.Call_Log_Date, 101)' – Lamak

+0

Это просто вставка GetDate()? И я прошу прощения. Я довольно новичок в SQL. – Avegavalencia

+0

Просто замените 'Lead (.....' на 'GETDATE()' – Lamak

ответ

1

Используйте Coalesce, чтобы заменить значение NULL с текущей датой.

Select 
    convert(varchar, CLL.Call_Log_Date, 101) as [CreatedDate], 
    convert(varchar, Coalesce(Lead(CLL.Call_Log_Date, 1) 
      Over (Order by CLL.Call_Log_Date DESC), GetDate()), 101) as [Lead], 
    DATEDIFF(dd, Coalesce(Lead(CLL.Call_Log_Date, 1) 
      Over (Order by CLL.Call_Log_Date DESC), GetDate()), CLL.Call_Log_Date) as [DIFF] 
From VMWareSM_Test.dbo.RV_CALL as CLL 
Where CLL.IPK_Status_Ref = '1' 
And CLL.Call_Priority_Ref IN (6,7) 
Order by [DIFF] DESC; 
Смежные вопросы