0

私はテーブルWOPO. 両方のテーブルをフィールドでリンクできますWO#

WO表

WO フィールド

WO#
WO_Date 

注文表

PO フィールド

PO#
PO_Date
WO#

PO#PO テーブルには、同じ にリンクされたものがいくつかありますWO#。次のフィールドを返すクエリが必要ですが、注意点は、1 つのレコードにつき 1 つのみを返し、PO テーブル内の一致するレコードから最も 高い日付 (同じものに一致するすべてのレコードの最も高い日付)WO#のみを結合する必要があることです。PO#WO# WO_Date PO# PO_DatePO#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'sPOWHERE 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

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 に答える
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 に答える