Как сделать одну строку на основе последней даты в SQL Server 2017 - PullRequest
0 голосов
/ 17 января 2020

Есть ли простой способ просто получить Last claimStatus, last Coverage на основе последнего TransactionDate в одной строке и получить сумму moneyvalue.

declare @ClaimsTable table 
                     (
                          Claimantid int,  
                          ClaimStatus varchar(50), 
                          Coverage varchar(50), 
                          TransactionDate date, 
                          moneyvalue money
                     )

insert into @ClaimsTable 
values (1111, 'Closed','BI', '2018-09-28',  1500),
       (1111, 'Open','BI', '2018-09-18',  300),
       (1111, 'Closed','PD', '2018-01-30',  800),
       (1111, 'Open','PD', '2018-09-13',  500),
        (2222, 'Closed','PD', '2018-04-08',  200),
        (2222, 'Open','PD', '2018-04-10',  100)

select * from @ClaimsTable

enter image description here

Результат должен выглядеть следующим образом:

enter image description here

Ответы [ 2 ]

0 голосов
/ 18 января 2020

По вашему требованию

Последнее состояние заявки, последнее покрытие, основанное на последней дате транзакции в одной строке и имеющее сумму денег

Вы можете достичь этого за 2 шага

  1. Получите MAX(TransactionDate) и SUM(moneyvalue) с каждым Claimantid соответственно.
  2. Обновление ClaimStatus, Coverage на основе TransactionDate.
    ;WITH cte_tempData AS( -- Step 1
         SELECT Claimantid,
                MAX(TransactionDate) TransactionDate, 
                SUM(moneyvalue) moneyvalue
         FROM ClaimsTable
         GROUP BY Claimantid, ClaimStatus
    ) -- Step 2
    SELECT t.Claimantid, c.ClaimStatus, c.Coverage, t.TransactionDate, t.moneyvalue
    FROM ClaimsTable c
    INNER JOIN cte_tempData t ON c.TransactionDate = t.TransactionDate
    ORDER BY t.Claimantid

Демонстрация в реальном времени на дБ <> скрипка

Выход

0 голосов
/ 17 января 2020

Вы можете легко достичь этого с помощью агрегации. Как то так.

select c.Claimantid
    , min(c.ClaimStatus)
    , Max(c.TransactionDate)
    , sum(c.moneyvalue)
from @ClaimsTable c
group by c.Claimantid
order by c.Claimantid
...