Sql 从恰好位于给定日期之前的日期和多个条件中选择记录
在下表中,有对特定R_ID和F_ID的跟踪。Col_C='10'标记循环中的最终条目。条目='1'表示新条目,条目='2'表示在同一日期修改现有条目。ENTRY='2'表示它是最近的条目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
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)
虽然我没有尝试过这个查询,但我认为它可以帮助您。到目前为止,您尝试了什么?请张贴您的尝试;像如何做到这一点而不表现出任何努力这样的问题在这里通常是不受欢迎的