如何根据Oracle中的其他列确定值更改

时间:2015-07-03 15:46:24

标签: sql oracle

下表包括非唯一身份证,金钱价值和日期/时间。

id_1   value_1     value_time       id_version      Version_time
138    250         09-SEP-14        595             02-SEP-14
140    250         15-SEP-14        695             01-AUG-14
140    300         30-DEC-14        720             05-NOV-14   
233    250         01-JUN-15        800             16-MAY-15

正如您可以看到id_1,id_version和时间列可以在表格中更改,但value_1可能会保持不变。

我知道如果id_1在行中相同,则value_1只能根据id_version进行更改。但是表中的id_version太多了。我知道它会根据id_version而改变,但我不知道它的确切更改时间。

首先,我必须决定,id_version和id_version时间会导致id_1更改值。

但是id_1并不是唯一的,而且id可能会改变,但值保持不变:)

编辑:来自OP的评论 - 开始
这是我想要获得第一行和第二行而不是第三行和第四行的期望结果示例。

| 140 | 250 | 15-SEP-14 | 695 | 01-AUG-14 |
| 140 | 300 | 31-DEC-14 | 725 | 07-NOV-14 |
| 140 | 300 | 05-JAN-14 | 740 | 30-NOV-14 |
| 140 | 300 | 30-DEC-14 | 720 | 05-NOV-14 |

编辑:来自OP的评论 - 结束

在这种情况下,提前感谢您真的需要帮助。

1 个答案:

答案 0 :(得分:1)

根据目前为止给出的输入(并且仅处理链接到图片中的数据 - 而不是当前示例数据中的数据),以下内容应该有助于您入门:

SELECT
  TMin.id_1
  , TMin.value_1
  , TO_CHAR(TAll.value_time, 'DD-MON-RR') value_time
  , TMin.id_version
  , TO_CHAR(TMin.version_time, 'DD-MON-RR') version_time
FROM
  (SELECT
    id_1
    , value_1
    , MIN(id_version) id_version
    , MIN(version_time) version_time
  FROM T
  GROUP BY id_1, value_1
  ORDER BY id_1, value_1
  ) TMin
JOIN T TAll
  ON TMin.id_1 = TAll.id_1
  AND TMin.value_1 = TAll.value_1
  AND TMin.id_version = TAll.id_version
  AND TMin.version_time = TAll.version_time
ORDER BY TMin.id_1, TMin.value_1
;

查看实际操作:SQL Fiddle 如果需要调整/进一步详细说明,请发表评论。