我有一張名爲「Input_Data」的表格,如下所示,從這張表格中我將獲取其他表格的輸入值。使用其他表格數據更新新表格,在新表格中進行少量修改
**TN start_date operator**
12345 12-May-2015 123
67890 14-May-2015 456
而另一臺「Output_data」,如下圖,該表將得到更新,按照從「Input_Data」
**SOURCE_ID EFFECTIVE_DATE EXPIRATION_DATE PROVIDER_ID**
12345 01-Jan-2014 555
由於12345 SOURCE_ID已經存在於Output_Data表未來值,在這種情況下,我想更新來自「Input_Data」表的source_id 12345的條目,使得「Output_Data」表中的較早條目將與新條目的start_date一起過期。另一行將插入新條目。因此,「Output_Data」應如下:
**DEST_ID EFFECTIVE_DATE EXPIRATION_DATE PROVIDER_ID**
12345 01-Jan-2014 12-May-2015 555
12345 12-May-2015 123
67890 14-May-2015 456
我新的SQL,並與一些查詢試圖像下面的上述任務:
select A.TN, A.START_DATE, A.OPERATOR, NVL(A.expiration_date,
to_date('31-12- 9999 00:00:00','DD-MM-YYYY hh24:mi:ss'))
from
(select tn,start_date,destination,
Lead(effective_date) over (partition by tn order by effective_date) as expiration_date
from
(select op.DEST_ID tn, op.EFFECTIVE_DATE start_date,
op.PROVIDER_ID destination
from Output_Data op, Input_Data ip where op.DEST_ID=ip.TN
union
select ip.TN tn, ip.start_date effective_date, ip.operator destination
from Input_Data ip) T) A
where effective_date != NVL(expiration_date,to_date('31-12-9999','DD-MM-YYYY hh24:mi:ss'))
但上面的查詢甚至沒有得到執行,所以我我無法檢查輸出。
您標記爲mysql,sql-server和oracle!?查詢是否適用於每個DBMS? – CeOnSql
您錯過了'PostgreSQL'和'DB2'。 –
我已經標記了所有這些只是爲了得到答案。我期待在Oracle上運行的查詢。 –