高级SQL连接

时间:2013-06-06 13:11:49

标签: sql

我需要表WOPO。这两个表都可以通过WO#字段进行链接。

WO表

WO字段

WO#
WO_Date 

PO表

PO字段

PO#
PO_Date
WO#

在PO表中,有几个PO#链接到同一个WO#。 我需要一个返回以下字段的查询,但需要注意的是,我应该只返回每WO#一条记录,并加入唯一一条来自PO表中匹配记录的日期最长的PO# WO# WO_Date PO# PO_Date(所有PO#匹配相同WO#的最高日期)

我正在使用MS Query从Oracle DB中读取数据。

4 个答案:

答案 0 :(得分:2)

试试这个:

SELECT 
    *
FROM WO
JOIN (SELECT 
          *,
          ROW_NUMBER() over (PARTITION BY WO# ORDER BY WO_Date DESC) AS RowNo
      FROM PO
    ) PO
ON PO.WO# = WO.WO#
WHERE PO.RowNo = 1

如果您可能有很多记录,我还会在INDEX上建议WO_Date

如果您可能LEFT JOIN没有相应的WO's条记录,则可能需要使用PO,并将WHERE CLAUSE调整为WHERE PO.RowNo = 1 OR PO.WO# IS NULL }。

答案 1 :(得分:0)

如果PO#是顺序的,那么最高PO#匹配最高日期:

SELECT wo.WO#. WO_Date, MAX(PO#) "PO#", MAX(PO_Date) "PO_Date"
FROM [WO]
LEFT JOIN [PO] on wo.WO# = po.WO#
GROUP BY wo.WO#, WO_Date

答案 2 :(得分:0)

听起来你只需要使用子查询加入:

SELECT *
FROM WO
JOIN (SELECT PO#, MAX(PO_Date) PO_DATE
      FROM PO
      GROUP BY PO#
     )PO
ON WO.WO# = PO.PO#

答案 3 :(得分:0)

Select * From WO w
  left Join PO p
      On p.WO# = w.WO#
         And p.PO_Date =
           (Select Max(PO_Date)
            From PO
            Where WO# = w.WO#)