0
次の表には、特定のR_IDとF_IDの追跡があります。 Col_C = '10'はサイクルの最後のエントリを示します。 ENTRY = '1'は新しいエントリを意味し、ENTRY = '2'は同じ日付の既存のエントリを変更することを意味します。 ENTRYは=「2」それは私が私が私が指定した日付と複数の条件の直前の日付からレコードを選択する
F_ID R_ID DATE ENTRY Col_A Col_B Col_C Score_1 Score_2 Score_3 85 158 20161012 2 01 01 99 3 2 2 85 158 20161022 2 99 99 10 3 1 2のようなものを探していた結果については
1. The most recent final entry i.e Col_C = '10' and if Col_C = '10' and ENTRY = '1' or '2' for the same DATE then select the one with ENTRY = '2' and 2. records with Col_A or Col_B = '01' and Col_C != '10' where the date just precedes(before) the DATE of final entry. Also if Col_A or Col_B = '01'and if ENTRY = '1' or '2' for the same DATE then select the one with ENTRY = '2'
のレコードを取得するよう選択する必要が
F_ID R_ID DATE ENTRY Col_A Col_B Col_C Score_1 Score_2 Score_3
85 158 20161005 1 99 99 01 0 0 0
85 158 20161010 1 01 99 99 3 2 2
85 158 20161010 2 01 99 99 3 2 2
85 158 20161012 1 01 01 99 3 2 2
85 158 20161012 2 01 01 99 3 2 2
85 158 20161019 1 99 02 99 3 2 2
85 158 20161022 1 99 99 10 3 2 2
85 158 20161022 2 99 99 10 3 1 2
最新のエントリであることを意味します
私は以下を試しました。
select * from tbl T where Col_C = '10' and T.date=(select min (T2.date) from tbl T2 where T2.Col_C = '10' and T2.R_ID = T.R_ID
and T2.F_ID = T.F_ID)
union
select * from
(
select *
from tbl k
where (k.Col_A = '01' or k.Col_B = '01')
and k.Col_A <> k.Col_B
and k.Col_C <> '10'
k.date =
(select min (k2.date) from tbl k2
where (k2.Col_A='01' or k2.Col_B='01') and
k2.Col_A <> k2.Col_B and
k2.Col_C <> '10' and
k2.R_ID = k.R_ID
and k2.F_ID = k.F_ID
)
union
select *
from tbl S
where S.Col_A = '01' and S.Col_B = '01' and S.Col_C <> '10'
and S.date =
(select min (S2.date) from tbl S2
where S2.Col_A='01' and S2.Col_B='01' and S2.Col_C <> '10' and
S2.R_ID = S.R_ID
and S2.F_ID = S.F_ID
)
)
最新の最終エントリー(最終日のCol_C = '10')と前のエントリー(Col_AまたはCol_B = '01')のロジックをピン止めすることはできません
F_ID、R_IDごとに2レコード。 1つの最終エントリーと1つ前のエントリー
ありがとう。
これまでに何を試しましたか?あなたの試みを投稿してください。何も表示せずに「これをやる方法」のような質問は、通常はここで歓迎されません – Aleksej