Как выбрать претензии, которые были созданы, и никаких действий с ними не проводилось в течение более 10 дней. - PullRequest
0 голосов
/ 27 ноября 2018

Заявка будет создана, и затем последовательность действий (с ActivityDate) будет выполняться для этой заявки до ее закрытия.

ActivityID = 0 означает, что Claim создано.

Цель состоит в том, чтобы отображать только те заявки, которые были созданы, и никакие действия не выполнялись в течение более 10 дней с сегодняшнего дня.

В приведенном ниже примере Claim2 и Claim4 были созданы более 10 лет назад, и после этого над ними не было выполнено никаких действий.

enter image description here

declare @TempTable table (ClaimNumber varchar(50), ActivityID int, Activity varchar(50), ActivityDate datetime, ClaimStatus int)
insert into @TempTable values   ('Claim1', 0, 'ClaimCreated', '2018-05-04', 0 ),
                                ('Claim1', 4, 'ReserveCreated', '2018-05-09', 0 ),
                                ('Claim1', 6, 'PaymentCreated', '2018-05-15', 0 ),
                                ('Claim1', 8, 'ClaimClosed', '2018-11-01', 1 ),
                                ('Claim2', 0, 'ClaimCreated', '2018-11-01', 0 ),                          
                                ('Claim3', 0, 'ClaimCreated', '2018-05-04', 0 ),
                                ('Claim3', 4, 'ReserveCreated', '2018-05-09', 0 ),
                                ('Claim3', 6, 'PaymentCreated', '2018-05-15', 0 ),
                                ('Claim4', 0, 'ClaimCreated', '2018-11-10', 0 )

select * from @TempTable

Так как я могу отображать только Claim2 и Claim4?

Ответы [ 3 ]

0 голосов
/ 27 ноября 2018
select * from
(
    select *,
           cnt = count(*) over (partition by ClaimNumber order by ActivityDate
                                rows between unbounded preceding and unbounded following),
           diff_date = DATEDIFF(d, ActivityDate, SYSDATETIME())
    from @TempTable 
) x
where cnt = 1 and diff_date > 10;
0 голосов
/ 27 ноября 2018

вот и ты, бутон

select *
from (
select *
,TimeBetweenPayments_1 = datediff(day,[ClaimCreated],[ReserveCreated])
,TimeBetweenPayments_2 = datediff(day,[ReserveCreated],[PaymentCreated])
,TimeBetweenPayments_3 = datediff(day,[PaymentCreated],[ClaimClosed])
from (
select *
from (
select ClaimNumber, ActivityDate,Activity
--,Rank_1 = Row_number() over(partition by ClaimNumber order by ActivityDate asc)
from @TempTable
) as a
pivot (
max(ActivityDate)
    FOR Activity IN ([ClaimCreated], [ReserveCreated], [PaymentCreated], [ClaimClosed])
) as pvt
) c
)d
where (TimeBetweenPayments_1 is null or TimeBetweenPayments_1 > 10 )
0 голосов
/ 27 ноября 2018

Используйте предложение WHERE NOT EXISTS ().

...