Sha*_*aji 5 sql oracle oracle10g
我有一个实验室值表,我想查询并获得最后一个值和最近值之间的差异,如果它> = 0.2.我该怎么做呢.这是我到目前为止的查询.任何帮助,将不胜感激.数据库是Oracle 10g.有关详情,请参见截图
SELECT DISTINCT VISITLAB.DATEOFENTRY, VISITLAB.LABVALUE, VISITLAB.CODE
FROM(XCX.PATIENTVISIT PATIENTVISIT
INNER JOIN
XCX.MASTERPATIENT MASTERPATIENT
ON (PATIENTVISIT.MASTERPATIENTID = MASTERPATIENT.MASTERPATIENTID))
INNER JOIN
XCX.VISITLAB VISITLAB
ON (VISITLAB.MASTERPATIENTID = PATIENTVISIT.MASTERPATIENTID)
AND (VISITLAB.VISITNUMBER = PATIENTVISIT.VISITNUMBER)
WHERE (MASTERPATIENT.MASTERPATIENTID = 'xxxxxxxx')
AND (VISITLAB.CODE = 'UQN0')
AND (PATIENTVISIT.DISCHARGEDATE IS NULL)
AND (PATIENTVISIT.FACILITYCODE = 'x')
Run Code Online (Sandbox Code Playgroud)

您应该使用 LAG 分析函数来检索上一行中的值。
SELECT * FROM (
SELECT DISTINCT VISITLAB.DATEOFENTRY, VISITLAB.LABVALUE, VISITLAB.CODE,
(LAG(VISITLAB.LABVALUE) over (order by VISITLAB.DATEOFENTRY) - VISITLAB.LABVALUE) as DIFF
FROM(XCX.PATIENTVISIT PATIENTVISIT
INNER JOIN
XCX.MASTERPATIENT MASTERPATIENT
ON (PATIENTVISIT.MASTERPATIENTID = MASTERPATIENT.MASTERPATIENTID))
INNER JOIN
XCX.VISITLAB VISITLAB
ON (VISITLAB.MASTERPATIENTID = PATIENTVISIT.MASTERPATIENTID)
AND (VISITLAB.VISITNUMBER = PATIENTVISIT.VISITNUMBER)
WHERE (MASTERPATIENT.MASTERPATIENTID = 'xxxxxxxx')
AND (VISITLAB.CODE = 'UQN0')
AND (PATIENTVISIT.DISCHARGEDATE IS NULL)
AND (PATIENTVISIT.FACILITYCODE = 'x')
) INLINEVIEW
WHERE DIFF < .2
Run Code Online (Sandbox Code Playgroud)
这不一定是您正在寻找的答案,但它演示了如何根据前一行中的值计算派生列的值。