2016-11-23 52 views
1

我有两个表,表1中包含四和本周的价值和表2中包含的数据,我想从表1
表明基于价值四强四数据例如基于来自其他表值获得最后四个四数据

表1(将只有单排)

Week Quater 
W3  Q22015 

表2

Quater Column1 ColumnN 
Q12015 X11  Y11 
Q12014 X1  Y1 
Q22014 X2  Y3 
Q32014 X3  Y4 
Q42014 T1  Y5 
Q42013 3  Y7 
Q32013 5  7 
Q22013 6  8 

输出数据(表1,因为有Q22015小号Ø最后四个季度的数据将是

Q12015 
Q42014 
Q32014 
Q22014 

表3

Quater Column1 ColumnN 
Q12015 X11  Y11 
Q22014 X2  Y3 
Q32014 X3  Y4 
Q42014 T1  Y5 

也可以本人申请过滤器在两个四和本周如果我的表有一周还喜欢W1,W2,W3等比我想展示过去四个季度加高达周的数据进行数据是提在表1

感谢

+0

结果我会与固定数据开始。 'Q12015'并不代表四分之一,因为它没有那种自然的好方法,而“Q”是没有必要的。任何解决方案将是一个'SUBSTRING'怪物。我建议存储为'YYYYQ':第1季2015年'20151',第二季度2015年'20152'等类似的问题与周,其中“W”是没有必要的。 –

+0

吉布斯你好,谢谢,是的你是对的,但实际上我只能写SELECT语句 – Russel

回答

0

你应该存储值quarted在最适当的方式进行一个简单的选择 但站在实际情况,你可以操纵字符串并选择这种方式

select Quater , Column1 , ColumnN 
    from my_table 
    where concat(substr(quater, -4), substr(quater,2,1))<= 
      (select concat(substr(quater, -4), substr(quater,2,1) from table1) 
    and rownum <5 
    order concat(substr(quater, -4), substr(quater,2,1)) 

并获得所有相关的最后4四

select Quater , Column1 , ColumnN 
from my_table 
where quater in (

    select quater from my_table 
    where concat(substr(quater, -4), substr(quater,2,1)) <= 
       (select concat(substr(quater, -4), substr(quater,2,1) from table1) 
    and rownum <5 
    order concat(substr(quater, -4), substr(quater,2,1)) 
) 
order concat(substr(quater, -4), substr(quater,2,1)) 
+0

嗨scaisEdge,谢谢,限4不(通过查询工作,直到顺序)的工作,并Oracle支持限制 – Russel

+0

@Russel ..correct答案更新与Oracle上使用的rownum – scaisEdge

+0

scaisEdge嗨过滤器,它给我前4行,其中我的要求是让所有的数据基础上在表1的值最后四个季度(我可能millinos reocrd在我的表,它可能考虑过去10年的数据),但你已经给了我一些起点,我会尝试使用它来获得我需要的东西。 – Russel