/ / Відмітний запис з двох об'єднаних таблиць, одне "окреме" поле, контрольна дата - sql, ms-доступ, ms-access-2007, окрема

Відмінна запис з двох об'єднаних таблиць, одне "окреме" поле, контрольна дата - sql, ms-access, ms-access-2007, distinct

Доступ 2007

TableA
IDx      Filename

TableB
IDy     Date     Name

У таблиці В є більше полів, але це має працювати.
IDy не унікальна, може мати копії. IDx унікальний, копій немає.

З чого я почав:

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

Куди я намагаюся дістатися:
(Як сказано в іншому моєму питанні, в яке я вірюбув надто загальним, щоб відповісти про наміри. Я не зміг перетворити обрану відповідь на роботу з двома таблицями і не зміг додати коментар у відведений простір, щоб повторно задати питання більш детально.)

Список різних записів на основі TableA.ID з найбільш актуальним записом з TableB на основі TableB.Date, якщо IDx = IDy створює дублікати.

Сподіваюся, це зрозуміло.

Відповіді:

3 для відповіді № 1

Щось подібне, ймовірно, повинно вирішити вашу проблему:

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 лише до рядків із останніми Dates для кожного IDy робиться через хитрий пристрій, який передбачає приєднання TableB повернутися до себе і шукати рядки, де для будь-якої заданої Date немає дат, більших (пізніше) від них.

Виявляється, це в основному те саме, що і рішення Джона Гібба, тільки це стосується LEFT JOIN (другий) + WHERE key IS NULL замість NOT EXISTS.


0 для відповіді № 2

Не впевнений, чи це буде працювати в MS Access, але варто спробувати:

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

0 для відповіді № 3

На основі коментарів спробуйте цей вимикач для краватки, написаний як приєднання зліва.

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