最后记录从公式中省略

时间:2016-07-06 14:07:25

标签: mysql sql loops

我写了一些逻辑来确定kcode(医生账单)对于患者是否正确。我写了一些逻辑来循环记录并在列中放置值得kcode的正确CP(护理提供者)的ID。由于某种原因,最后一条记录或最后两条记录没有遵循逻辑。这是我的逻辑代码(在游标内):

OPEN kcode_count;
kcode_loop: LOOP

    FETCH kcode_count INTO dbPTNT_ID, dbCP_ID, dbSEEN, holder, dbDATE, holder2;
    IF done THEN
        LEAVE kcode_loop;
    END IF;

    IF dbPTNT_ID <> setPTNT_ID THEN
        IF setPTNT_ID <> 0 THEN
            UPDATE tmp_kcodes
            SET SHOULD_GET = setCP_ID
            WHERE setPTNT_ID = PTNT_ID;
        END IF;
        SET setPTNT_ID = dbPTNT_ID;
        SET setCP_ID = dbCP_ID;
        SET setSEEN = dbSEEN;
        SET setDATE = dbDATE;

    ELSEIF dbSEEN > setSEEN THEN
            SET setCP_ID = dbCP_ID;
            SET setSEEN = dbSEEN;
            SET setDATE = dbDATE;

    ELSEIF dbSEEN = setSEEN THEN
        IF dbDATE < setDATE THEN
            SET setCP_ID = dbCP_ID;
            SET setSEEN = dbSEEN;
            SET setDATE = dbDATE;
        END IF;
    END IF;


END LOOP kcode_loop;
CLOSE kcode_count;

如下所示,在SHOULD_GET列中,最后两个记录产生NULL。有什么理由吗?

enter image description here

1 个答案:

答案 0 :(得分:0)

问题是,您只有在处理某位患者后才更新SHOULD_GET(患者20092469的数据会在循环获取第一份20092491患者记录时更新)。对于最后一名患者,这显然不可能发生,dbPTNT_ID <> setPTNT_ID条件永远不会得到满足。

乍一看,我会重复

    IF setPTNT_ID <> 0 THEN
        UPDATE tmp_kcodes
        SET SHOULD_GET = setCP_ID
        WHERE setPTNT_ID = PTNT_ID;
    END IF;

在kcode_loop结束后立即阻止更新最后一个正在处理的患者。

另一个解决方案可能是在游标返回的结果集的末尾附加一个“虚拟”行,这样就可以为最后一个病人触发dbPTNT_ID <> setPTNT_ID条件。