同一个表的两个行值的差异

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)

在此输入图像描述

map*_*aft 2

您应该使用 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)

这不一定是您正在寻找的答案,但它演示了如何根据前一行中的值计算派生列的值。