您好,希望有人可以提供帮助。我有一张看起来像下面的桌子。
Case_ID Task_ID Created_Date Created_By
4567 5654 01-Jun-2018 John.Doe
4567 2324 02-Jun-2018 John.Doe
4567 8634 05-Jun-2018 Jane.Doe
4567 2444 20-Jun-2018 Sharon.Test
4567 8953 25-Jun-2018 Max.Test
4567 2444 27-Jun-2018 John.Doe
4567 8953 30-Jun-2018 Pamela.Test
4567 6546 01-Aug-2018 John.Doe
4567 7566 02-Aug-2018 Steven.Ely
4567 7666 07-Aug-2018 Jane.Doe
4567 9087 07-Aug-2018 Sharon.Test
4567 5433 13-Aug-2018 Max.Test
4567 4321 13-Aug-2018 John.Doe
4567 1242 30-Aug-2018 Pamela.Test
每个Case_ID是一个个案。每当用户在这种情况下工作时,都会添加新的Task_ID以及此Task_ID的Created_Date和创建它的人的用户名。我需要一个附加列,一个标志,用于显示在14天之内是否有4个或更多不同的顾问处理了案件。我从上面需要的输出看起来像下面的
Case_ID Task_ID Created_Date Created_By Flag
4567 5654 01-Jun-2018 John.Doe 0
4567 2324 02-Jun-2018 John.Doe 0
4567 8634 05-Jun-2018 Jane.Doe 0
4567 2444 20-Jun-2018 Sharon.Test 0
4567 8953 25-Jun-2018 Max.Test 0
4567 2444 27-Jun-2018 John.Doe 0
4567 8953 30-Jun-2018 Pamela.Test 1
4567 6546 01-Aug-2018 John.Doe 0
4567 7566 02-Aug-2018 Steven.Ely 0
4567 7666 07-Aug-2018 Jane.Doe 0
4567 9087 07-Aug-2018 Sharon.Test 1
4567 5433 13-Aug-2018 Max.Test 1
4567 4321 13-Aug-2018 John.Doe 1
4567 1242 30-Aug-2018 Pamela.Test 0
因此,为了解释上述内容,Pamela.Test是第一个获得该标志的人是因为她是14天内在Case_ID 4567上工作的第四个不同的人,第一个是Sharon.Test在20天-2018年6月。自Pamela.Test进行此操作以来已超过14天,此标志在John.Doe的8月1日重置为0。另外,Created_Date列是日期时间,因此某些日子可能有多个与之关联的Task_ID
这有意义吗?我真的不知道从哪里开始,我将不胜感激,因为我将继续进行类似这样的项目,因此会有所帮助:)谢谢,杰西。
编辑-
查询的示例输出给出了以下解决方案的错误输出。不知道为什么Gareth.Opal是第一个也是唯一一个将Task_ID添加到1002982的人时带有标志的人
答案 0 :(得分:3)
类似这样的东西:-
CREATE TABLE #caseTable (
Case_ID VARCHAR(10)
,Task_ID VARCHAR(10)
,Created_Date DATETIME
,Created_By VARCHAR(50)
)
INSERT INTO #caseTable
VALUES (
4567
,5654
,'01-Jun-2018'
,'John.Doe'
)
,(
4567
,2324
,'02-Jun-2018'
,'John.Doe'
)
,(
4567
,8634
,'05-Jun-2018'
,'Jane.Doe'
)
,(
4567
,2444
,'20-Jun-2018'
,'Sharon.Test'
)
,(
4567
,8953
,'25-Jun-2018'
,'Max.Test'
)
,(
4567
,2444
,'27-Jun-2018'
,'John.Doe'
)
,(
4567
,8953
,'30-Jun-2018'
,'Pamela.Test'
)
,(
4567
,6546
,'01-Aug-2018'
,'John.Doe'
)
,(
4567
,7566
,'02-Aug-2018'
,'Steven.Ely'
)
,(
4567
,7666
,'07-Aug-2018'
,'Jane.Doe'
)
,(
4567
,9087
,'07-Aug-2018'
,'Sharon.Test'
)
,(
4567
,5433
,'13-Aug-2018'
,'Max.Test'
)
,(
4567
,4321
,'13-Aug-2018'
,'John.Doe'
)
,(
4567
,1242
,'30-Aug-2018'
,'Pamela.Test'
)
,(
4568
,1005
,'30-Aug-2018'
,'D.Test'
)
,(
4568
,1002
,'30-Aug-2018'
,'C.Test'
)
,(
4568
,1000
,'30-Aug-2018'
,'B.Test'
)
,(
4568
,1001
,'30-Aug-2018'
,'A.Test'
)
SELECT m.case_id
,m.task_id
,m.created_date
,m.created_by
,
(select count(distinct s.Created_By) from
(select *,ROW_NUMBER() over( order by case_id, created_date) as rowNum from #caseTable)
s
where s.Created_Date between dateadd(D,-14,m.Created_Date) and m.Created_Date and s.rowNum<=m.rowNum
and s.Case_ID=m.Case_ID) as uniqueCount,
IIF((
SELECT count(DISTINCT s.Created_By)
FROM (
SELECT *
,ROW_NUMBER() OVER (
ORDER BY case_id
,created_date
) AS rowNum
FROM #caseTable
) s
WHERE s.Created_Date BETWEEN dateadd(D, - 14, m.Created_Date)
AND m.Created_Date
AND s.rowNum <= m.rowNum and s.Case_ID=m.Case_ID
) >= 4, 1, 0) AS flag
FROM (
SELECT *
,ROW_NUMBER() OVER (
ORDER BY case_id
,created_date
) AS rowNum
FROM #caseTable
) m
DROP TABLE #caseTable
答案 1 :(得分:0)
我将使用相关的子查询:
select t.*,
(case when (select count(distinct t2.created_by)
from t t2
where t2.case_id = t.case_id and
t2.created_date <= t.created_date and
t2.created_date > dateadd(day, -14, t.created_date)
) >= 4
then 1 else 0
end) as four_consultant_flag
from t;