2015-07-03 89 views
3

下表包括非唯一ID,貨幣值和日期/時間。如何根據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

您是否想要通過id_1和時間訂購您的數據集?在這種情況下,ORDER BY子句會產生這種情況。你想要的輸出的例子,以及一些重新說明將有助於澄清你的問題。 – user3538411

+1

請添加期望的結果並嘗試修復解釋,這很難遵循。 –

+0

其實我想按id_1和版本時間排序。所以我想知道價值變化的確切時間。正如我所說的,有太多的版本時間,但我不知道導致值更改的確切版本號。 –

回答

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
請評論,如果和因爲這需要調整/進一步的細節。

相關問題