2015-11-03 61 views
-2

我写了一个触发器,当表记录被更新或插入以备将来处理时,它会触发。SQL Group By for multiple record

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

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

任何人都可以建议一个伪代码如何短语Oracle SQL?

+0

哪种RDBMS适用于?请添加一个标签来指定您是使用'mysql','postgresql','sql-server','oracle'还是'db2' - 或者其他的东西。 –

回答

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子句中添加所需的任何逻辑来比较早期和最新。