【问题标题】:Joining with max date from table加入表中的最大日期
【发布时间】:2014-01-21 18:39:25
【问题描述】:
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

我有一个类似的查询,我需要进行修改,在表 3 中有一个日期列,我需要选择最高的日期值行来加入。假设 3 号表中有 4 行满足加入,我需要从这 4 行中选择最高日期行用于加入目的,然后显示结果。

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

【问题讨论】:

  • col1、col2、col3 来自哪些表?这个不清楚。
  • @peter.petrov 它真正的大查询,出于示例目的,我只取了 imp 点。选择查询列来自不同的表,包括 Table1、Table2、Table3 和 Table4
  • 查看我的更新答案。我想你会明白的。

标签: sql oracle


【解决方案1】:

试试这个查询。

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'

主要思想是,而不是
加入TABLE3 你这样做:

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

给那个表/记录集一个名字,然后加入它。

然后你可以再次加入原来的TABLE3(见T33
TABLE3 中提取所有其他需要的列
不存在于T3

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

【讨论】:

  • 加入表 3 中的列将成为按功能分组的一部分,然后在该记录集之外我需要加入该表。我认为它应该可以工作,我正在将数据整理到表格中,很快就会得到结果。谢谢:)
  • @PravinSatav 是的,这就是主要思想。 AFAIK,这种方法看起来更复杂(作为 SQL 代码),但比 Radu 的答案建议的嵌套选择更有效。
  • @PravinSatav 看到这个:“JOIN TABLE3 T33 ON T3.KEY = T33.KEY AND T3.DT = T33.Day”,我刚刚添加了它。
【解决方案2】:

要尽量减少当前查询的修改,您可以在 WHERE 子句中添加条件

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

虽然我以后建议使用显式 JOINS。

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')

【讨论】:

    猜你喜欢
    • 2016-08-10
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 2016-01-21
    • 1970-01-01
    • 1970-01-01
    • 2019-09-21
    • 2021-04-07
    相关资源
    最近更新 更多