Zum ersten Mal bitte verzeihen Sie meine Neuigkeit! In MS Access 2013, Wie kann ich die 'LatestRequest'-Spalte der Actions-Tabelle mit der' id 'aus der IncomingRequests-Tabelle aktualisieren, indem nur das neueste RequestDate für jede Scan-Ergebnis-ID verwendet wird?MS Access 2013 - Wie führe ich ein SQL-Update mit ID basierend auf MAX-Datum von einer anderen Tabelle aus?
Beachten Sie, dass in IncomingRequests doppelte Scanergebnis-IDs vorkommen können, das Datum jedoch immer unterschiedlich sein wird.
Aktionen Tabelle:
id (primary key) | Scan Result ID | LatestRequest | other-misc-columns...
1 | 123456 | (blank)
2 | 666666 | (blank)
3 | 789789 | (blank)
4 | 888888 | (blank) (this record won't change)
5 | 999222 | 987 (this record won't change)
IncomingRequests Tabelle:
id (primary key) | RequestDate | Scan Result ID | other-misc-columns...
201 | 5/9/2016 | 123456
202 | 4/12/2016 | 123456
203 | 5/7/2016 | 666666
204 | 5/8/2016 | 666666
205 | 5/9/2016 | 789789
Was ich sehen will:
Aktion Tabelle:
id (primary key) | Scan Result ID | LatestRequest | other-misc-columns...
1 | 123456 | 201
2 | 666666 | 204
3 | 789789 | 205
4 | 888888 | (blank)
5 | 999222 | 987
Ich habe versucht, eine zu schaffen Unterabfrage für th Das maximale Datum und das Aktualisieren der Tabelle "Aktionen", jedoch unter "Vorgang muss eine aktualisierbare Abfrage verwenden" ausgeführt werden.
UPDATE Actions INNER JOIN (SELECT t1.*
FROM
IncomingRequests t1
INNER JOIN
(
SELECT [Scan Result ID], MAX([DateFromIT]) AS MaxDate
FROM IncomingRequests
GROUP BY [Scan Result ID]
) t2
ON t1.[Scan Result ID]=t2.[Scan Result ID]
AND t1.[RequestDate]=t2.MaxDate
) AS ij ON Actions.[Scan Result ID] = ij.[Scan Result ID]
SET LatestRequest = ij.id
Die alternative Version Ich habe (siehe unten) prüft die Anfrage Tabelle Primärschlüssel-ID verwenden, und dies funktioniert, außer, dass ich es nach neuestem Datum wirklich nicht höchste ID.
UPDATE Actions
INNER JOIN IncomingRequests ON Actions.[Scan Result ID] = IncomingRequests.[Scan Result ID]
SET Actions.latestrequest = IncomingRequests.id
WHERE IncomingRequests.id=
(SELECT MAX(IncomingRequests.id)
FROM IncomingRequests
WHERE Actions.[Scan Result ID] = IncomingRequests.[Scan Result ID]
GROUP BY IncomingRequests.[Scan Result ID]);
Ich habe lief in viele Sackgassen versuchen, andere Antworten von dieser Seite zu folgen, oder Fehler in MS Access, die andere nicht zu bekommen schien. Jede Hilfe wird geschätzt.
Vielen Dank! =)
Danke für die Aussage. Ich habe den Fehler 'Ungültige SQL-Anweisung' erhalten - er erwartet delete/insert/procedure/select/update. Laut http://stackoverflow.com/questions/24970777/how-doi-i-use-the-with-statement-in-access Access unterstützt diese Anweisung –
@AndyJ bitte nicht die bearbeitete Antwort. – Sam
Danke für die bearbeitete Antwort. Leider gab es einen "Syntaxfehler (fehlender Operator) im Abfrageausdruck" t2.id von Ac ..... etc ' \t Ich entfernte die' aus Aktionen 'Zeile und legte die' set Actions.LatestRequest = t2.id ' Nach der letzten Zeile, und das schien zumindest syntaktisch korrekt zu sein. Die innerste SELECT MAX() -Anweisung disassoziiert jedoch die Daten von den IDs, und es gibt doppelte Daten. Daher hat die äußere SELECT-Anweisung nur Daten, mit denen sie arbeiten kann, und die Abfrage tut nicht, was sie tun soll. –