Как определить разницу в месяце между строками таким образом, как пересечение - PullRequest
2 голосов
/ 02 мая 2019

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

CREATE TABLE #Customers (
  customerid INT,
  issuedate DATE,
  statusdate date
)

INSERT INTO #Customers
SELECT 928, '2017-07-24',   '2018-01-22'
union
SELECT 928, '2018-04-05',   '2018-10-05'
union
SELECT 928, '2019-02-21',   '2019-01-21'

--The Result should be like this "Displaying the difference between '2018-01-22' and '2018-04-05'
--And difference between '2018-20-05' and '2019-02-21'

DROP TABLE #Customers

Я ожидаю, что в результате запроса будет отображаться разница в месяцах между столбцами «statusdate» и «assignate», что дает вывод 3 и4

SELECT DATEDIFF(MONTH,'2018-01-22','2018-04-05')
UNION
SELECT DATEDIFF(MONTH,'2018-10-05','2019-02-21')

Ответы [ 2 ]

1 голос
/ 02 мая 2019

Используйте функцию LAG(), чтобы получить значение из предыдущей строки, и проверьте, где это значение не равно нулю. Мы используем вспомогательный выбор для извлечения значений, поскольку функции LAG() нельзя использовать в предложении WHERE.

SELECT DATEDIFF(MONTH, T.PreviousStatusDate, T.issuedate) as difference
FROM (
  SELECT LAG(c.statusdate) OVER(ORDER BY c.statusdate) as PreviousStatusDate,
         c.issuedate
  FROM Customers c
) AS T
WHERE T.PreviousStatusDate IS NOT NULL

Результат,

difference
----------------
3
4
1 голос
/ 02 мая 2019

Если я правильно понимаю, и вы хотите получить разницу между значениями из текущей и последующих строк, следующий подход с использованием LEAD () может помочь:

SELECT DATEDIFF(MONTH, statusdate, nextissuedate) AS [Difference]
FROM (
   SELECT 
      customerid,
      issuedate,
      statusdate,
      LEAD(issuedate) OVER (PARTITION BY customerid ORDER BY issuedate) AS nextissuedate
   FROM #Customers     
) t
WHERE nextissuedate IS NOT NULL

Выход:

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