/ / 2つの結合されたテーブルからの個別のレコード、1つの「distinct」フィールド、制御日付 - sql、ms-access、ms-access-2007、distinct

2つの結合されたテーブルからの別個のレコード、1つの「別個の」フィールド、日付の制御、msアクセス、msアクセス2007、別個

アクセス2007

TableA
IDx      Filename

TableB
IDy     Date     Name

テーブルBにはもっとフィールドがありますが、これでうまくいくはずです。
IDyは一意ではなく、重複する可能性があります。 IDxは一意で重複しません。

私が始めたもの:

 SELECT TableA.IDx, TableA.Filename, TableB.Date, TableB.Name
FROM TableA LEFT JOIN TableB ON TableA.IDx = TableB.IDy

私が行こうとしているところ:
(私の他の質問で述べたように、私は信じていますその意図に答えるにはあまりにも一般的でした。選出された回答を2つの表を処理するように変換することはできず、割り当てられたスペースにコメントを追加してより詳細に質問することはできませんでした。

IDx = IDyの場合、TableB.Dateに基づいてTableBからの最新のレコードを含むTableA.IDに基づいた個別のレコードのリストが重複します。

これが理解できることを願っています。

回答:

回答№1の場合は3

このような何かはおそらくあなたの問題を解決するはずです:

SELECT a.IDx, a.Filename, b1.Date, b1.Name
FROM ((TableA AS a)
LEFT JOIN TableB AS b1 ON a.IDx = b1.IDy)
LEFT JOIN TableB AS b2 ON b1.IDy = b2.IDy AND b1.Date < b2.Date
WHERE b2.IDy IS NULL

の出力を制限する TableB 最新の行だけに Dateすべてのs IDy 参加を含む巧妙なデバイスを介して行われます TableB 自分自身に戻り、与えられた行を探します Date それより後の日付はありません。

結局のところ、それは "基本的にジョンギブの解決策と同じです、それだけが含まれ LEFT JOIN (二番目)+ WHERE key IS NULL の代わりに NOT EXISTS.


回答№2の場合は0

これがMS Accessで機能するかどうかはわからないが、試してみる価値がある

SELECT TableA.IDx, TableA.Filename, TableB.Date, TableB.Name
FROM TableA, TableB
WHERE TableA.Idx in (SELECT DISTINCT TableB.IDy FROM TableB)

回答№3の場合は0

コメントに基づいて、左結合として書かれたこのタイブレーカーを試してみてください。

select *
from TableA a
left join TableB b
on b.idy = a.idx
and b.date < a.date
where b.idy is null