私はこれに固執しているので、私の脳は現時点で完全にドロドロになっているに違いありません。私は誰かが薬を与えられた日付の表を持っています、そしてこれは彼らが薬を服用することになっている日数と一緒に来ます。人は薬の数を処方できるn
ので、次のクエリのCTEは、最大の時間枠(薬の充填日+供給日数)を見つけることです。次に、少なくとも7つの異なる薬を服用している人を見つけたいと思います。同時に。私は人々が与えられた時間枠で服用している薬を見つけるのに苦労しています。これは、人が少なくともseven
一度に薬を服用していた期間に制限する必要があります。その最後の部分まで、すべてが正常に機能します。
CTEからのサンプルデータ(fillDate + longestscript =endingDate)
並行スクリプトはcount(distinct rx.drugname)
、クエリで決定されます
;with cte
as
(
select rx.patid
,rx.fillDate
,MAX(rx.dayssup) as longestScript
,DATEADD(day,cast(rx.dayssup as int),rx.filldate) as endingDate
from rx
group by rx.patid, rx.fillDate,rx.daysSup
),
startends as (
select patid, FillDate as thedate, 1 as isstart 0 as isend
from CTE union all
select patid, EndingDate as thedate, 0 as isstart, 1 as isend
from CTE
),
cums as (
select se.*,
(select min(thedate) from startends se2 where se2.filledate > se.filldate) as nextdate,
(select SUM(isstart) from startends se2 where se2.filldate <= se.filldate) as cumstarts,
(select SUM(isend) from startends se2 where se2.filldate <= se.filldate) as cumends
from startends se
)
select *
from cums
where sumstarts - cumends >= 7
2番目のクエリでは、fillDateとendingDateの間の期間が異なる各患者が何度も表示されていることがわかります。2番目のスクリーンキャップの最初の行で9つの薬を繰り返すクエリを作成するにはどうすればよいですか?SQL Server08r2は私のdbmsです。