Sql 从表中加入最大日期
我有一个类似的查询,我需要做修改,在表3中有一个日期列,我需要选择最大的日值行来加入。假设表3中有4行对联接感到满意,我需要从这4行中选择日期最高的行进行联接,然后显示结果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
希望问题很清楚。数据库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