Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: Stardave am Juni 08, 2015, 00:36:06

Titel: Abfrage nach neuestem Datum pro Typ (SQL)
Beitrag von: Stardave am Juni 08, 2015, 00:36:06
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!


Titel: Re: Abfrage nach neuestem Datum pro Typ (SQL)
Beitrag von: DF6GL am Juni 08, 2015, 08:19:35
Hallo,


SELECT *  FROM tblArtikel
Where MaxvonArt_Datum in (Select top 1 B.MaxVonArt_Datum from tblArtikel as B order by B.MaxVonArt_Datum desc)
Titel: Re: Abfrage nach neuestem Datum pro Typ (SQL)
Beitrag von: Stardave am Juni 09, 2015, 00:49:28
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!

Titel: Re: Abfrage nach neuestem Datum pro Typ (SQL)
Beitrag von: ebs17 am Juni 09, 2015, 16:28:11
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

Titel: Re: Abfrage nach neuestem Datum pro Typ (SQL)
Beitrag von: Stardave am Juni 09, 2015, 20:36:40
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

Titel: Re: Abfrage nach neuestem Datum pro Typ (SQL)
Beitrag von: Stardave am Juni 09, 2015, 22:14:31
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!
Titel: Re: Abfrage nach neuestem Datum pro Typ (SQL)
Beitrag von: ebs17 am Juni 09, 2015, 22:32:14
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.