Sql 从恰好位于给定日期之前的日期和多个条件中选择记录

Sql 从恰好位于给定日期之前的日期和多个条件中选择记录,sql,oracle,Sql,Oracle,在下表中,有对特定R_ID和F_ID的跟踪。Col_C='10'标记循环中的最终条目。条目='1'表示新条目,条目='2'表示在同一日期修改现有条目。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

在下表中,有对特定R_ID和F_ID的跟踪。Col_C='10'标记循环中的最终条目。条目='1'表示新条目,条目='2'表示在同一日期修改现有条目。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
我需要进行选择,以便获取的记录

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 20161012 2 01 01 99 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的两个记录。一个最终条目和一个之前条目


谢谢。

您可以尝试以下查询-

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)

虽然我没有尝试过这个查询,但我认为它可以帮助您。

到目前为止,您尝试了什么?请张贴您的尝试;像如何做到这一点而不表现出任何努力这样的问题在这里通常是不受欢迎的