0

我必须表WOPO. 两个表都可以通过WO#字段链接。

WO表

WO领域

WO#
WO_Date 

采购订单表

采购订单字段

PO#
PO_Date
WO#

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

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

4

4 回答 4

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 CLAUSEWHERE PO.RowNo = 1 OR PO.WO# IS NULL.

于 2013-06-06T13:17:14.910 回答
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#)
于 2013-06-06T13:18:44.413 回答
0

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

SELECT *
FROM WO
JOIN (SELECT PO#, MAX(PO_Date) PO_DATE
      FROM PO
      GROUP BY PO#
     )PO
ON WO.WO# = PO.PO#
于 2013-06-06T13:17:38.490 回答
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
于 2013-06-06T13:17:37.713 回答