〜52,000のレコードを持つtblDumpがあります。これは、対応する投与時間を持つ ID のリストです。関連する変数はSubjectNumber
、、、、RECDATE
です。各患者は 1 日 2 回投与するため、とperがあります。これを表示するために、これまでにこれを持っています:RECTIME
FoodType
Min(RECTIME)
Max(RECTIME)
RECDATE
SELECT tblDump.SubjectNumber, tblDump.RECDATE,
Min(RECTIME) As MornDose, Max(RECTIME) As EveDose
FROM tblDump
GROUP BY tblDump.SubjectNumber, tblDump.RECDATE
ORDER BY tblDump.SubjectNumber, tblDump.RECDATE Asc;
変数FoodType
には、1、2、または 3 の 3 つの可能性があります。1 日あたり 1 に関連付けられ、3 に関連付けられMin(RECTIME)
ている Subjects を出力する必要があります。Max(RECTIME)
forとforHAVING
のようなステートメントを作成しようとしましたが、言語学を正しく理解できません。Foodtype = 1
Min(RecTIME)
Foodtype = 3
Max(RECTIME)
解決済み:
わかりました、これを行うためのより効率的な方法があると確信していますが、これは機能します。うまくいけば、これは誰かまたは誰かがより効率的な方法を投稿するのに役立ちます. 3 つのクエリを使用しました。1 つは最小投与時間用、もう 1 つは最大投与時間用、もう 1 つはそれらを結合するためのものです。
qryMin:
SELECT a.SubjectNumber, a.RECDATE, First(a.colm AS MornDose), First(m.FoodType)
FROM (SELECT SubjectNumber, RECDATE, MIN(RECTIME) as colm
FROM tblDump GROUP BY SubjectNumber, RECDATE) AS a
INNER JOIN tblDump AS m
ON (a.colm=m.RECTIME)
AND (a.RECDATE = m.RECDATE)
AND (a.SubjectNumber = m.SubjectNumber)
GROUP BY a.SubjectNumber, a.RECDATE
ORDER BY a.SubjectNumber, a.RECDATE;
qryMax:
SELECT a.SubjectNumber, a.RECDATE, First(a.colm) AS MornDose, First(m.FoodType)
FROM (SELECT SubjectNumber, RECDATE, MAX(RECTIME) AS colm
FROM tblDump GROUP BY SubjectNumber, RECDATE) AS a
INNER JOIN tblDump AS m
ON (a.SubjectNumber = m.SubjectNumber)
AND (a.RECDATE = m.RECDATE)
AND (a.colm = m.RECTIME)
GROUP BY a.SubjectNumber, a.RECDATE
ORDER BY a.SubjectNumber, a.RECDATE;
qryCombo:
SELECT qryMin.*, qryMax.*
FROM qryMin
INNER JOIN qryMax
ON qryMin.SubjectNumber = qryMax.SubjectNumber
WHERE qryMin.RECDATE = qryMax.RECDATE
AND qryMin.FoodType = 1
AND qryMax.FoodType = 3;