2017-04-13 8 views
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つ前のエントリー

ありがとう。

+0

これまでに何を試しましたか?あなたの試みを投稿してください。何も表示せずに「これをやる方法」のような質問は、通常はここで歓迎されません – Aleksej

答えて

0

クエリ次試すことができます -

SELECT F_ID, R_ID, DATE, MAX(ENTRY), Col_A, Col_B, Col_C, Score_1, Score_2, Score_3 
FROM YOUR_TABLE 
WHERE Col_C = '10' 
GROUP BY DATE 
UNION ALL 
SELECT F_ID, R_ID, DATE, MAX(ENTRY), Col_A, Col_B, Col_C, Score_1, Score_2, Score_3 
FROM YOUR_TABLE 
WHERE (Col_A = '01' OR Col_B = '01') 
AND Col_C <> 10 
GROUP BY DATE 
HAVING DATE < MAX(DATE) 

私はこのクエリを試していないが、私は、これはあなたを助けることができると思いますが。

関連する問題