事务数据聚合



作为免责声明,我不完全确定问题的标题是最好的,如果不是,我道歉。

我试图计算个人的周期时间,但文件偶尔会从他们的工作队列中转移出来,最终又会返回。没有只记录日期和时间戳的唯一交易ID。

我试着按函数查找聚合组,但被告知这不是sql server的功能。

我开始尝试识别第一个和最后一个事务,并打算从那里构建查询,但这并没有太大帮助。任何见解都会很有帮助。

变更日期是指记录从一个人到另一个人的转移(年、月、日(

select a.claimId,
a.claimincidentID,
cast(a.changeDate as date) changedate,
a.claimNum,
a.Coverage,
a.AssignedAdjID, 
a.AssignedAdj,
a.AssignedUnit,
a.TransferedAdjID,
a.TransferedAdj,
a.TransferedUnit,
a.usertypeid,
a.ChangedBy,
b.Feature_Create_Date,
DATEDIFF(day, b.Feature_Create_Date, a.changedate) transfer1,
cast(FIRST_VALUE(changeDate) OVER (ORDER BY changedate ASC)as date) AS firstchangedate,
cast(LAST_VALUE(changeDate) OVER (ORDER BY a.changedate ASC)as date) AS lastchangedate 
from DB1.dbo.Assign_Transfer a
left join DB2.claimslist b on a.claimid=b.claimId 
group by a.claimId, a.claimincidentID, a.changeDate, a.claimNum, a.Coverage, a.AssignedAdjID, a.AssignedAdj, a.AssignedUnit, a.TransferedAdjID, a.TransferedAdj, a.TransferedUnit, a.usertypeid, a.ChangedBy, b.Feature_Create_Date
Think of each of these rows as a Start (because the most recent one hasn't ended)
We would need to generate the complement End for this person in the chain.
Then with pairs of Start/End one could create GrossDuration.
Even after we get an assignment's start and end date/time,
we will have workday (8-4, or 9-5, or noon-8, ...) considerations, 
also Sat/Sun/Hol and Vacation/out-of-office.  
All of which affect Duration--- For Each Person differently.
Which would need to be factored by workday/etc into AdjDuration.
Lets say we can sequence these 
Row_Number() Over (Partition by claimID Order by changeDate) as tfrNum
Assigned is the prior, and Transfered is the next
1, 2, 3, ... thru  N
V
a.changeDate                 -- NOW()
V                          V
a.AssignedAdjID,   |  a.TransferedAdjID,
a.AssignedAdj,     |  a.TransferedAdj,
a.AssignedUnit,    |  a.TransferedUnit,
|
a.usertypeid,
a.ChangedBy,
So, is tfrNum=1 or tfrNum=N the oddball??
Lets look at pairs: each pair goes StartFrom->EndTo
1-2, 2-3, 3-4, 4-5, 5-6, 6-Now
----
From row1 we get TransferredID Start(changeDate) and 
from row2 we get AssignedAdjID End  (changeDate)
-- 2-3, 3-4, 4-5, etc repeating
--except for
From row6 we get TransferredID Start(changeDate) and
from default  (still them)  End  (Now)
-- -- except again when TransferredUnit is "Closed"

在得到这些配对及其开始和结束后,我们可以进行持续时间计算。

在尝试运行一些sql之前,我需要将这个问题可视化。真实数据会有所帮助。

让我们从这个开始,稍后我会在你让它工作并查看一些数据后对其进行扩展——

With cte_tfrNum (claimID, changeDate, tfrNum, tfrMax) AS
(
SELECT
a.claimId
,a.changeDate
,ROW_NUMBER() Over ( Partition By a.claimId Order By a.changeDate) as tfrNum
,b.tfrMax
FROM  DB1.dbo.Assign_Transfer a
-- just for giggles, lets also get the max# of transfers for this claim
Left Join 
(SELECT claimId, COUNT(*) as tfrMax
FROM  DB1.dbo.Assign_Transfer 
Group By claimId
) as b
On b.claimId = a.claimId
)
-- Statement using the CTE  
Select
tfrTo.*
From cte_tfrNum as tfrTo

谢谢!我能够接受你给我的东西,并添加一些东西,以便能够看到我需要的东西。

select 
case when abc.tfrMax > abc.tfrnum then datediff(day,lag(abc.changedate) over(partition by abc.claimID order by abc.claimId),abc.changeDate)
when abc.tfrMax = abc.tfrnum then datediff(day,lag(abc.changedate) over(partition by abc.claimID order by abc.claimId),abc.changeDate)
end as test
, abc.*
from
(
SELECT
a.claimId
,a.changeDate
,a.AssignedAdj
,a.TransferedAdj
,a.Coverage
,ROW_NUMBER() Over ( Partition By a.claimId Order By a.changeDate) as tfrNum
,b.tfrMax
FROM  db1.dbo.Assign_Transfer a
Left Join 
(SELECT claimId, COUNT(*) as tfrMax
FROM  db1.dbo.Assign_Transfer 
Group By claimId
) as b
On b.claimId = a.claimId
) abc   
group by 
abc.claimId
,abc.changeDate
,abc.AssignedAdj
,abc.TransferedAdj
,abc.Coverage
,abc.tfrMax
,abc.tfrNum

相关内容

  • 没有找到相关文章

最新更新