sql - Oracle中如何根据另一列判断值的变化

标签 sql oracle

下表包括非唯一 ID、货币值(value)和日期/时间。

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变化的,但是我不知 Prop 体的变化时间。

所以首先我必须决定,哪个 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的评论-完

提前致谢 在这种情况下确实需要帮助。

最佳答案

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

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 .
请评论,如果这需要调整/进一步的细节。

关于sql - Oracle中如何根据另一列判断值的变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31210452/

相关文章:

sql - 数据库 : advantages of relations

mysql - 过滤MySQL查询结果集以在特定时间段内产生多次出现

oracle - 获取Oracle中的调用包/过程

database - Oracle sqlplus > 替换提示变量

sql - Oracle SQL : Export to CSV avoiding newlines

sql - 如何在oracle中计算范围

sql - SELECT 查询应返回 Postgresql 中 OR 条件之一的记录

sql - 当您知道连接会产生重复项时,SELECT DISTINCT 是不好的做法吗?

sql - 具有多个条件的 WHERE 子句中的 Oracle Case

甲骨文 10g : Can CLOB data lengths be less than 4, 000?