Дата Сравнение между строками - PullRequest
2 голосов
/ 31 марта 2019

У меня есть следующие результаты, где я добавил дополнительный столбец для ExpectedResult.

Я не уверен, как заставить это работать, где значение DateFrom должно сравниваться со следующим значением DateFrom до последней строки в этой категории, где оно должно сравниваться со значением DateTo. DateTo также может быть NULL, где он должен сравниваться с getdate () в этом случае.

У кого-нибудь есть идеи, как этого достичь?

enter image description here

Для категории 1, сравнение выполняется с 2019-03-01 по 2019-03-08, затем с 2019-03-08 по 2019-03-11 и, наконец, с 2019-03-11 по 2019-03 -14, а затем сбрасывает для следующей категории.

Пример данных:

Create Table #TestData
(
    ID int,
    Category int,
    DateFrom datetime,
    DateTo datetime NULL,
    ExpectedResult int
)

insert into #TestData
(
    ID,
    Category,
    DateFrom,
    DateTo,
    ExpectedResult
)
select
    1,
    1,
    '01 Mar 2019',
    '06 Mar 2019',
    7
union all
select
    2,
    1,
    '08 Mar 2019',
    '09 Mar 2019',
    3
union all
select
    3,
    1,
    '11 Mar 2019',
    '14 Mar 2019',
    3
union all
select
    1,
    2,
    '04 Mar 2019',
    '07 Mar 2019',
    4
union all
select
    2,
    2,
    '08 Mar 2019',
    '15 Mar 2019',
    10
union all
select
    3,
    2,
    '18 Mar 2019',
    '24 Mar 2019',
    6

select  * from #TestData

drop table #TestData

1 Ответ

3 голосов
/ 31 марта 2019

Похоже, вы в основном ищете для оконной функции lead(). И для datediff() чтобы получить разницу в днях и coalesce() для замены NULL s.

SELECT id,
       category,
       datefrom,
       dateto,
       expectedresult,
       datediff(day,
                datefrom,
                lead(datefrom,
                     1,
                     coalesce(dateto,
                              getdate())) OVER (PARTITION BY category
                                                ORDER BY datefrom)) calculatedexpectedresult
       FROM #testdata;

дб <> скрипка

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