SQL Group By for multiple record

时间:2015-11-03 09:27:41

标签: sql oracle group-by

我编写了一个触发器,只要更新或插入表记录以便将来进行处理,它就会触发。

因为记录可以更新几次,所以我的触发表可能有重复的记录。例如。插入后,人员记录可以编辑,再次编辑,这样就会在触发表中生成3条记录。所以我需要做的是按每个重复记录分组并检查第一条记录的最新记录,并将其余状态更新为“OUTDATED”。为什么最新和第一,因为如果最新的记录类型是删除,这意味着我不需要处理任何只是更新所有'过时'但如果第一个记录是'添加'并随后记录从更新触发器,该记录有进程'添加'逻辑。

            SELECT \
            TYPE, PER_ID, CREATED_DATETIME \
            FROM \
            TRIGGER_TABLE \ 
            GROUP BY ...
            ORDER BY CREATED_DATETIME DESC

任何人都可以建议使用伪代码来表达Oracle SQL吗?

1 个答案:

答案 0 :(得分:0)

        SELECT \
        TYPE, PER_ID, CREATED_DATETIME \
        FROM \
        TRIGGER_TABLE as LatestRecord \
        OUTER APPLY (SELECT TOP 1 PER_ID
        FROM TRIGGER_TABLE AS FirstRecord
        WHERE LatestRecord.PER_ID = FirstRecord.PER_ID
        ORDER BY FirstRecord.CREATED_DATETIME ASC
        ) as EarliestRecord
        WHERE *Logic to compare EarlierRecord To Latest Record*
        ORDER BY LatestRecord.CREATED_DATETIME DESC

您可以根据上述查询编写更新。 OUTER APPLY将返回具有匹配PER_ID的最早记录。然后,您可以在WHERE子句中添加所需的任何逻辑,以比较早期和最新版本。