Hallo zusammen,
folgendes Szenario:
Ich hab hier zwei Tabellen:
tblMaterial
mat_id
mat_name
tblArtikel
art_id
art_nr
art_datum
mat_id_fk
Da unsere Artikel immer wieder ein Upgrade erhalten ändert sich die Artikel-Nr. aber nicht deren Name. Bestellt werden sollte nur der mit dem neuestem Upgrade.
Nun suche ich nach einer Möglichkeit nur diese bestellbaren mir anzuzeigen.
Optionsfeld (bestellbar: ja/nein) ist möglich aber umständlich.
Per Abfrage nach Datum filtern hört sich für mich nach der besten Lösung.
Oder gibt es hierfür noch eine eleganteren Weg?
Ich hab nach bestem Wissen und Gewissen einige Codes-Beispiele gefunden und versucht umzusetzen.
Mit SELECT WHERE/INNER JOIN/MAX/DMAX/DOMMAX ect. So viel verschiedenes und nix will so wie ich. (Liegt gewiss an mir)
Mit diesem Code...
SELECT tblArtikel.mat_id_fk, tblArtikel.art_id, tblArtikel.art_nr, Max(tblArtikel.art_datum) AS Maxvonart_datum
FROM tblArtikel
GROUP BY tblArtikel.art_nr, tblArtikel.mat_id_fk, tblArtikel.art_id;
Bekomme ich das hier... (Ist auch klar)
(http://up.picr.de/22171163fd.jpg)
Aber benötige das hier ohne die Zeilen welche blau durchgestrichen sind.
(http://up.picr.de/22171169lv.jpg)
Könntet ihr mir bitte, bitte bei dem Code helfen?
Danke im Voraus!
Hallo,
SELECT * FROM tblArtikel
Where MaxvonArt_Datum in (Select top 1 B.MaxVonArt_Datum from tblArtikel as B order by B.MaxVonArt_Datum desc)
Hallo DF6GL
Das MaxvonArt_Datum wurde bei meinem Code automatisch erzeugt.
Hab es dann in art_datum geändert und soweit funktioniert dein Code.
Allerdings habe ich hier ein Problem:
Wenn alle Artikel ein Upgrade am gleichen Tag bekommen, wird mir von jedem Artikel das Neueste (mit gleichem Datum) angezeigt.
Wenn ich aber ein neues Upgrade (neue art_nr und neues art_datum) eingebe dann zeigt die Abfrage hier nur den einen neuen Artikel an.
Ich bräuchte hier aber alle Artikel mit dem jüngstem Datum.
Könntest du mir noch einmal helfen.
Danke!
ZitatDa unsere Artikel immer wieder ein Upgrade erhalten ändert sich die Artikel-Nr. aber nicht deren Name.
Ein Artikel-
Name kommt aber in dem bisher gezeigten nicht vor ...?
Gruppiert wird dafür nach einer Artikel-ID (eindeutig?) und nach wechselnden Artikelnummern, was dann sachlich Unsinn ist.
Etwa (nach den jetzigen Informationen):
SELECT
A.*
FROM
tblArtikel AS A
INNER JOIN
(
SELECT
ArtName,
MAX(art_datum) AS LastDate
FROM
tblArtikel
GROUP BY
ArtName
) AS X
ON A.ArtName = X.ArtName
AND
A.art_datum = X.LastDate
Hallo Eberhard,
ZitatEin Artikel-Name kommt aber in dem bisher gezeigten nicht vor ...?
Richtig, ein Artikel-Name kommt nicht vor, mein Fehler. Sorry. Es sollte hier mat_name heißen aus der tblMaterial welche über mat_id und mat_id_fk mit der tblArtikel in Beziehung steht. (Siehe Screenshot 1)
Über art_id zu gruppieren ist sicherlich Unsinn da es nur jeweils eine gibt.
Werde dein Code anpassen und ausprobieren.
Eine Frage noch zu deinem Code:
Was machen die Buchstaben
A und
X?
Sind diese bestimmt und gehören zum Ausdruck oder sind sie frei wählbar?
Sind das Variablen?
Wird die SELECT-Anweisung in den Klammern zuerst
aufgelöst?
Vielen Dank
Fettes Merci an die zwei Helfer.
Nach Anpassung macht der Code was er soll!
SELECT
A.*
FROM
tblArtikel AS A
INNER JOIN
(
SELECT
mat_id_fk,
MAX(art_datum) AS LastDate
FROM
tblArtikel
GROUP BY
mat_id_fk
) AS X
ON A.mat_id_fk = X.mat_id_fk
AND
A.art_datum = X.LastDate
Vielen Dank!
ZitatWas machen die Buchstaben A und X?
Das sind Aliasnamen für Tabellen, siehe Grundlagen - SQL ist leicht (2) - Alias (http://www.ms-office-forum.net/forum/showthread.php?t=298432).
ZitatWird die SELECT-Anweisung in den Klammern zuerst aufgelöst?
Das kann man in diesem Fall sagen. Die Abarbeitung einer Abfrage beginnt mit dem FROM-Teil, also dem Bezug der Tabellen. Daher muss die Unterabfrage eingangs ausgeführt werden.