これはこの1つのフォローアップの質問のようなものです:次のように私が持っている二つのテーブルがあるHow do I need to change my sql to get what I want in this case?varchar2を解析して複数の行にする方法は?
:
Table 1
id id2 date
1 2 2015-01-10
2 5 2015-06-13
3 9 2015-09-05
4 10 2015-02-11
5 26 2015-01-10
6 65 2015-01-25
Table 2
id id2 data(varchar2)
1 2 A
2 5 A
3 9 A
4 10 B
5 26 B
6 65 B
Table 2
内のデータは、varchar2型のものであり、それにN
番号が含まれていますはid2
に依存する可能性があります。,
で区切られています。私は上記の表のために、以下のことになるTable 1
で最大の日付を持っているTable 2
でユニークdata
を返すクエリを、書きたい
1.0,1.1,1.2,1.3,1.4,1.5,2.6,2.7,2.8,2.9, ...(ommitted)..., 9.5,9.9
:
たとえば、A
はこのようなものかもしれません
id2 date number
2 2015-01-10 1.0
2 2015-01-10 1.1
2 2015-01-10 1.2
2 2015-01-10 1.3
...
2 2015-01-10 9.5
2 2015-01-10 9.9
10 2015-02-11 ***
10 2015-02-11 ***
...
10 2015-02-11 ***
それぞれ固有のid2
は、クエリ出力にN
回表示されます。
私は次のようにのファジィ回答に基づいて独自のid2
秒取得することができています:
select * from (
select
t2.id2, t1.date, t2.data,
row_number() over (partition by t2.data order by t1.date desc) rn
from table1 t1
join table2 t2 on t1.id2 = t2.id2
) t where rn = 1;
をしかし、私はそこから継続するのか分かりません。どうもありがとう。代わりに、日付(予約語)のMyDateに該当私がここで使用しています
CREATE or replace TYPE test_type AS TABLE OF varchar2(40)
CREATE or replace FUNCTION test_func (d VARCHAR2)
RETURN test_type
PIPELINED
IS
BEGIN
FOR C1 IN ( SELECT REGEXP_SUBSTR (d, '[^,]+', 1, LEVEL) x
FROM DUAL
CONNECT BY REGEXP_SUBSTR (d, '[^,]+', 1, LEVEL) IS NOT NULL)
LOOP
PIPE ROW (c1.x);
END LOOP;
END;
/
WITH test
AS (your_query_here)
SELECT x.id2, x.mydate, y.*
FROM test x, TABLE (test_func (x.d)) y
とDデータの代わりに:
が一定値80か、それともそれが行から変更することができます行? – Aleksej
@Aleksej私はそれをより明確にするために質問の説明を更新しました。 – Dainy
問題は、この恐ろしいテーブルのデザインです。 'data'がちょっとした文字列を含んでいる限り、大丈夫でしょう。しかし、これは当てはまりません。 'data'に格納されている部分文字列に興味があります。しかし、別々のデータに興味がある場合は、別々に保管してください!この混乱を混乱させるような質問を書かないでください。データベースを変更してください。 –