【发布时间】:2019-09-25 08:11:31
【问题描述】:
我在 oracle 查询中的 order by 有问题。
select KEY, B, C, (select D from TABLE1 a where a.KEY = b.KEY and a.DATE<
b.DATE order BY a.DATE and rownum =1 )
FROMSTATUS from TABLE2 b
我知道“order by”在子查询中不起作用。我将查询修改为:
select KEY, B, C, (select * from (select D from TABLE1 a where a.KEY =
b.KEY and a.DATE< b.DATE order by DATE) where rownum = 1)
FROMSTATUS from TABLE2 b
但是通过这种方式 B.KEY 和 B.DATE 并没有被 oracle 解析
我只需要从 TABLE2 中选择一个 1 值,该值是前一个 a.DATE
例子:
TABLE1
KEY DATE A B C
1 01/31/2000 1 2 3
2 02/25/2000 X Y Z
TABLE2
KEY DATE D
1 01/30/2000 1
1 01/27/2000 2
1 01/25/2000 2
2 02/20/2000 4
2 02/13/2000 1
我需要这个结果:
TABLE1.KEY TABLE1.DATE TABLE1.A TABLE1.B TABLE1.C TABLE2.DATE TABLE2.D
1 01/31/2000 1 2 3 01/30/2000 1
2 02/25/2000 X Y Z 02/20/2000 4
你能帮帮我吗?
(对不起我的英语不好)
【问题讨论】:
-
跳过子查询,改为执行 LEFT JOIN。
-
查询与您的描述不符。您已将 table1 和 table2 混合在一起。您还应用了错误的顺序,它必须是
order by date desc才能首先获得最高日期。 -
@ThorstenKettner 你有理由,我有正确的问题