Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 从表中加入最大日期_Sql_Oracle - Fatal编程技术网

Sql 从表中加入最大日期

Sql 从表中加入最大日期,sql,oracle,Sql,Oracle,我有一个类似的查询,我需要做修改,在表3中有一个日期列,我需要选择最大的日值行来加入。假设表3中有4行对联接感到满意,我需要从这4行中选择日期最高的行进行联接,然后显示结果 希望问题很清楚。数据库oracle 10g若要最小限度地修改当前查询,可以在WHERE子句中添加一个条件 SELECT COL1, COL2, COL3 FROM TABLE1, TABLE2, TABLE3, TABLE4 WHERE TABLE1.KEY1 = TABLE2.KEY

我有一个类似的查询,我需要做修改,在表3中有一个日期列,我需要选择最大的日值行来加入。假设表3中有4行对联接感到满意,我需要从这4行中选择日期最高的行进行联接,然后显示结果


希望问题很清楚。数据库oracle 10g

若要最小限度地修改当前查询,可以在
WHERE
子句中添加一个条件

SELECT COL1,
    COL2,
    COL3
FROM TABLE1,
    TABLE2,
    TABLE3,
    TABLE4
WHERE TABLE1.KEY1 = TABLE2.KEY1
    AND TABLE2.KEY = TABLE3.KEY
    AND TABLE2.FILTER = 'Y'
    AND TABLE3.FILTER = 'Y'
    AND TABLE2.KEY = TABLE3.KEY
    AND TABLE3.KEY = TABLE4.KEY
尽管将来我建议使用显式连接

AND TABLE3.DATE = (SELECT MAX(DATE) FROM TABLE3 WHERE TABLE3.FILTER = 'Y')

尝试类似这样的查询

SELECT COL1,
    COL2,
    COL3
FROM TABLE1 
    INNER JOIN TABLE2 ON TABLE1.KEY1 = TABLE2.KEY1
    INNER JOIN TABLE3 ON TABLE2.KEY = TABLE3.KEY
    INNER JOIN TABLE4 ON TABLE3.KEY = TABLE4.KEY
WHERE 
    TABLE2.FILTER = 'Y'
    AND TABLE3.FILTER = 'Y'
    AND TABLE3.DATE = (SELECT MAX(DATE) FROM TABLE3 WHERE TABLE3.FILTER = 'Y')
其主要思想是代替
加入
表3
可以执行以下操作:

SELECT
    COL1,
    COL2,
    COL3,
    T33.*

FROM TABLE1

JOIN TABLE2 ON TABLE1.KEY1 = TABLE2.KEY1

JOIN TABLE4 ON TABLE2.KEY = TABLE4.KEY

JOIN

(
    SELECT MAX(T.Day) as DT, T.KEY
    FROM TABLE3 T
    WHERE T.FILTER = 'Y'
    GROUP BY T.KEY
) T3 on TABLE4.KEY = T3.KEY

JOIN TABLE3 T33 ON T3.KEY = T33.KEY AND T3.DT = T33.Day

WHERE

TABLE2.FILTER = 'Y'
为该表/记录集指定一个名称,并与其联接

然后,您可以再次加入原始的
表3
(请参见
T33

表3
中提取所有其他需要的列
不存在于
T3


我想,你可以计算出其他细节。

从哪些表中可以得到col1、col2、col3?这还不清楚。@peter.petrov这是一个真正的大问题,出于示例目的,我只考虑了imp点。select查询列来自不同的表,这些表包括表1、表2、表3和表4请参阅我的更新答案。我想你会明白的。连接表3中的列将是group by function的一部分,然后在该记录集之外,我需要连接该表。我想这应该行得通,我正在整理表格中的数据,很快就会给你们回复结果。谢谢:)@pravinstav是的,这是主要的想法。好吧,这种方法看起来更复杂(如SQL代码),但比Radu的答案所建议的嵌套选择更有效。@Pravinstav看到了:“在T3.KEY=T33.KEY和T3.DT=T33.Day上加入TABLE3 T33”,我刚刚添加了它。
SELECT MAX(T.Day) as DT, T.KEY
FROM TABLE3 T
WHERE T.FILTER = 'Y'
GROUP BY T.KEY