Oracle:将列值与先前的记录

时间:2017-05-11 19:57:50

标签: sql oracle

我有一个由函数加载的Oracle表 - 只要在best_status中找到“LOW_MEMORY”,它就会在low_mem_timestamp列中添加systimestamp。

+----------+-------------------+-------+-------------------------------+
| device_id| best_status       | job_id| low_mem_timestamp             |
+----------+-------------------+-------+-------------------------------+
| 715016   | OPERATION_FAILURE | 511008|(null)                         |
| 715009   | LOW_MEMORY        | 511008|10-MAY-17 11.13.22.143122000 AM|
| 715014   | DOWNLOAD_COMPLETE | 740004|(null)                         |
| 941015   | LOW_MEMORY        | 740004|10-MAY-17 11.13.22.143122000 AM|
+----------+-------------------+-------+-------------------------------+

在此之后,我有另一张表,我想记录上表中的变化

每当low_mem_timestamp更改为任何device_id时,如:

  1. 如果它有时间戳,现在它已更新为“null”,那么它应该添加“1”
  2. 如果它具有空值并且已更新为时间戳,则为“0”
  3. 输出表:

    条件:

    1. device_id ='715009'最佳状态从“LOW_MEMORY”移至“UPDATE_DEFERRED”,然后low_mem_timstamp更新为“null”,则low_mem_timstamp应为“1”
    2. device_id ='715014'最佳状态从“DOWNLOAD_COMPLETE”移至“LOW_MEMORY”,然后low_mem_timestamp更新为某个时间戳“任何时间戳”,然后low_mem_timstamp应为“0”
    3. device_id ='941015'最佳状态保持不变,未更新,则low_mem_timstamp应为“NA”
    4. 然后在我的决赛桌中输出应该像

        +----------+-------------------+-------+---------------+
          | device_id| best_status       | job_id| low_mem_toggle|
          +----------+-------------------+-------+---------------+
          | 715009   | UPDATE_DEFERRED   | 511008|1              |
          | 715014   | LOW_MEMORY        | 740004|0              |
          | 941015   | LOW_MEMORY        | 740004|NA             |
          +----------+-------------------+-------+---------------+
      

      请建议使用sql查询来实现此功能。

      提前致谢。

0 个答案:

没有答案