我需要根据行号来区分两个值。 CTE返回的数据如下
我想要做的是在rehabWait列(92-32)中将row2读取60
,将第三行读取为60(152-92`)等,直到patientid发生变化。因此,对于第11行,我希望rehabwait为110(114-4)。我的查询将运行但我返回所有NULLS
with x as
(
SELECT row_number() over (order by patientid, admissiondate, claimsfromdate, datediff(dd,admissiondate, claimsfromdate))as rn,
patientid, admissiondate, claimsfromdate,
DATEDIFF(dd, admissiondate, claimsfromdate) as rehabWait, hcpcs
FROM Claims
WHERE hcpcs in ('g0151', '97001', '97002', '9339') and
claimsfromdate > admissiondate
group by patientid, admissiondate, claimsfromdate, hcpcs
--adding this group by clause will keep rehabWait from showing up
--however many times they patient has the HCPCS code for rehab
)
select x.patientid
,x.admissiondate
,x.claimsfromdate
,(select x2.rehabWait-x.rehabwait from x where x.patientid=x2.patientid
and x.rn > x2.rn and x.admissiondate=x2.admissiondate and x.claimsfromdate=x2.claimsfromdate
)
from x inner join
x as x2 on x.patientid=x2.patientid and x.admissiondate=x2.admissiondate and x.claimsfromdate = x2.claimsfromdate
答案 0 :(得分:2)
with x as
(
SELECT row_number() over (PARTITION BY patientid order by patientid, admissiondate, claimsfromdate, datediff(dd,admissiondate, claimsfromdate))as rn,
patientid, admissiondate, claimsfromdate,
DATEDIFF(dd, admissiondate, claimsfromdate) as rehabWait, hcpcs
FROM #Claims
WHERE hcpcs in ('g0151', '97001', '97002', '9339') and
claimsfromdate > admissiondate
group by patientid, admissiondate, claimsfromdate, hcpcs
--adding this group by clause will keep rehabWait from showing up
--however many times they patient has the HCPCS code for rehab
)
select x.patientid
,x.admissiondate
,x.claimsfromdate
, CASE WHEN x2.rn = 1
THEN x.rehabWait
ELSE x2.rehabWait - x.rehabWait END AS rehabWait
from x INNER join
x as x2 on x.patientid=x2.patientid AND CASE WHEN x2.rn = 1 AND x.rn = 1 THEN x2.rn - 1 ELSE x.rn END = x2.rn - 1
select中的两个CASE语句确保您获得第一行。 PARTITION BY确保每个患者Id从rn = 1开始并上升。
编辑:我给你的第一个查询将丢失你的例子中的第1行和第10行。
答案 1 :(得分:0)
由于康复重量在增加,您可以执行以下操作:
with x as
(
SELECT patientid, admissiondate, claimsfromdate,
DATEDIFF(dd, admissiondate, claimsfromdate) as rehabWait, hcpcs
FROM Claims
WHERE hcpcs in ('g0151', '97001', '97002', '9339') and
claimsfromdate > admissiondate
group by patientid, admissiondate, claimsfromdate, hcpcs
--adding this group by clause will keep rehabWait from showing up
--however many times they patient has the HCPCS code for rehab
)
select patientid, admissiondate, claimsfromdate,
(RehabWait - prevRehabWait), hcpcs
from (select patientid, admissiondate, claimsfromdate, hcpcs, RehabWait,
(select max(RehabWait)
from x x2
where x2.patientid = x.patientid and x2.claimsfromdate < x.claimsfromdate
) as prevRehabWait
from x
) t
您不需要row_number()。相关子查询可以在日期字段上工作。