私が研究母集団を抽出した大規模なデータベースがあります。比較のために、同様の特性を持つコントロールグループを選択したいと思います。私が一致させたいものの2つの基準は、年齢と性別です。マッチングの目的で必要な番号を教えてくれるクエリは次のとおりです。
select sex, age/10 as decades,COUNT(*) as counts
from
(
select distinct m.patid
,m.sex,DATEPART(year,min(c.admitdate)) -m.yrdob as Age
from members as m
inner join claims as c on c.patid=m.PATID
group by m.PATID, m.sex,m.yrdob
)x group by sex, Age/10
次のような結果セット
この時代の数十年の列は、次の式で与えられます。
(DATEPART(year,min(c.admitdate)) -m.yrdob)/10
これは、整数除算を使用して20〜29歳、30〜39歳などの年齢範囲の人々を見つけるために使用されます。より大きなデータセットから、たとえば、20代の507人の女性を選択したいと思います。より大きなデータセットの特性を見つけるためのクエリは次のとおりです。
select distinct m.patid
,m.sex
,(DATEPART(year,min(c.admitdate)) -m.yrdob)/10 as decades
from members as m
inner join claims as c on c.patid=m.PATID
group by m.PATID, m.sex,m.yrdob
編集:2番目のクエリの結果
したがって、最初のクエリでsum
等しくなるように、2番目のクエリの数十年の列が必要です。counts
私が試した(そしてゼロの結果を返した)ことは以下の通りです。これらの年齢に合わせるために何をする必要がありますか?
実行されるが結果を返さないクエリ:
select x.PATID--,x.sex,x.decades,y.counts
from
(
select distinct m.patid
,m.sex
,(DATEPART(year,min(c.admitdate)) -m.yrdob)/10 as decades
from members as m
inner join claims as c on c.patid=m.PATID
group by m.PATID, m.sex,m.yrdob
) as x
inner join
(
select sex, age/10 as decades,COUNT(*) as counts
from
(
select distinct m.patid
,m.sex,DATEPART(year,min(c.admitdate)) -m.yrdob as Age
from members as m
inner join claims as c on c.patid=m.PATID
group by m.PATID, m.sex,m.yrdob
)x group by sex, Age/10
) as y on x.sex=y.sex and x.decades=y.decades
group by y.counts,x.PATID,x.sex,y.sex
having SUM(x.decades)=y.counts and x.sex=y.sex