下表包括非唯一 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/