Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Abfrage (SQL), letzen bekannten Wert ausgeben

Begonnen von TomWinter, Mai 18, 2017, 14:56:16

⏪ vorheriges - nächstes ⏩

TomWinter

Hallo zusammen,

ich hoffe, ihr könnt mir bei folgendem Problem helfen.

Ich habe in ACCESS zwei Tabellen:



Tabelle "Datum" mit dem Feld "Datum"

In dieser Tabelle stehen die Daten (Mehrzahl von Datum), die ausgewertet werden sollen.

Beispiel:

Datum
01.03.2017
02.03.2017
03.03.2017
04.03.2017
05.03.2017



Tabelle "Bestand" mit den Feldern "Bestandsdatum" und "Bestandsmenge"

In dieser Tabelle sind nur Datensätze enthalten, an denen sich die "Bestandsmenge" geändert hat

Beispiel:

Bestandsdatum | Bestandsmenge
01.03.2017 | 15
03.03.2017 | 20
05.03.2017 | 5



Nun habe ich eine Abfrage mit folgender SQL-Syntax erstellt:

SELECT Datum.Datum, Bestand.Bestandsmenge
FROM Datum LEFT JOIN Bestand ON Datum.Datum = Bestand.Bestandsdatum;


Damit erhalte ich folgende Ausgabe:

Datum | Bestandsmenge
01.03.2017 | 15
02.03.2017 |
03.03.2017 | 20
04.03.2017 |
05.03.2017 | 5



Nun meine Frage. Wie muss ich den SQL-Syntax ändern, damit immer die letzte bekannte "Bestandsmenge" angezeigt wird? Also wie folgt:

Datum | Bestandsmenge
01.03.2017 | 15
02.03.2017 | 15
03.03.2017 | 20
04.03.2017 | 20
05.03.2017 | 5


Ich hoffe, es hat jemand eine Lösung für mein Problem und bedanke mich schon mal.

Viele Grüße
Tom

Beaker s.a.


SELECT Max(Datum.Datum) AS Letzter, Bestand.Bestandsmenge
FROM Datum LEFT JOIN Bestand ON Datum.Datum = Bestand.Bestandsdatum;

"Datum" ist schelchte Benamsung, da reserviertes Wort.
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

TomWinter

Vielen Dank für die schnelle Antwort.

Leider klappt es nicht. ACCESS meldet folgenden Fehler: "Sie wollten eine Abfrage ausführen, die den angegebenen Ausdruck 'Bestandsmenge' nicht als Teil der Aggregatfunktion einschließt.

Grüße
Tom

Beaker s.a.

Hallo Tom,
Sorry, mal wieder gar nicht richtig gelesen  >:(
Muss ich noch mal einen Moment drüber nachdenken  :-[
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Lachtaube

ekkehard, wenn Du schon beim Nachdenken bist, erkläre doch bitte auch einmal die Bedeutung des Wortes "Benamsung" (im Duden habe ich dazu nichts finden können und eine gleichnamige chinesische Provinz konnte ich auch nicht ergründen). :)
Grüße von der (⌒▽⌒)


Beaker s.a.

Hallo,
Zitaterkläre doch bitte auch einmal die Bedeutung des Wortes "Benamsung"
Meinst du das ernst?
https://www.google.de/?gws_rd=ssl#q=access+benamsungen&spf=1495123275055

Mit dem Nachdenken komme ich allerdings nicht weiter; - keine Ahnung wo's da beimir wieder hakt  >:(

gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

DF6GL

Hallo,

wo(bei) denkst Du denn nach?

Die Fehlermeldung bedeutet, dass die Abfrage nicht gruppiert ist, was die Domänenfunktion erfordert.



Lachtaube

Klar meine ich das ernst. Unter einer Benennung oder einer Benamung (klingt auch schon etwas merkwürdig) kann ich mir etwas vorstellen, selbst benamsen ist mir schon zu Ohren gekommen - mit dem Substantiv Benamsung bin ich (außerhalb von Access-Foren) allerdings noch nie nie in Berührung gekommen - aber vielleicht stamme ich ja auch nur aus der falschen Ecke Deutschlands. :)
Grüße von der (⌒▽⌒)

ebs17

Evtl. so:
SELECT
   D.Datum,
   IIF(B.Bestandsmenge IS NULL,
   (
      SELECT TOP 1
         X.Bestandsmenge
      FROM
         tblBestand AS X
      WHERE
         X.BestandsDatum < D.Datum
      ORDER BY
         X.BestandsDatum DESC
   )
   , B.Bestandsmenge) AS Bestandsmenge
FROM
   tblDatum AS D
      LEFT JOIN tblBestand AS B
      ON D.Datum = B.BestandsDatum
Mit freundlichem Glück Auf!

Eberhard

Beaker s.a.

Zitatmit dem Substantiv Benamsung bin ich (außerhalb von Access-Foren)
W
Na, wo sind wir denn hier?  ;)

@Eberhard
Danke.
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

TomWinter

Guten Morgen zusammen,

der Code von  ebs17 war perfekt. Hat geklappt. Vielen Dank an alle für die schnelle Hilfe.

Grüße
Tom