2015-11-03 95 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子句中添加所需的任何邏輯來比較早期和最新。