AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Abfrage in Firebird DB über 6 Tabellen
Thema durchsuchen
Ansicht
Themen-Optionen

Abfrage in Firebird DB über 6 Tabellen

Ein Thema von daniel775 · begonnen am 9. Sep 2017 · letzter Beitrag vom 12. Sep 2017
 
daniel775

Registriert seit: 27. Nov 2010
46 Beiträge
 
#1

Abfrage in Firebird DB über 6 Tabellen

  Alt 9. Sep 2017, 13:22
Datenbank: Firebird • Version: 2.5.2.26540 • Zugriff über: SQL-Manager lite
Hallo,


ich verzweifel gerade an einer Abfrage bzw. an dem Konstrukt der Tabellen in Firebird.

Also die Tabellen müssen folgende Anforderungen erfüllen:
- Ein Artikel muss mehreren Lieferanten zuzuordnen sein.
- Jeder Artikel kann eine fremde Artikel-Nr eines Lieferanten haben.
- Jeder Artikel hat unterschiedliche Einkaufspreise von jeden Lieferanten mit unterschiedlichen Zeiträumen.


Auszug aus dem Aufbau der Tabellen:
(Siehe Anhang)


SQL-Query
Code:

SELECT k.Firmenname, k.KREDITORNR, k1.Datum, pr.LISTENPREIS_NETTO, pr.EKPREIS_NETTO
FROM
KREDITOREN as k,
KREDITOR_PREISE as pr,
REL_KREDITOR_ARTIKEL as r,
REL_KRED_ART_PREISE as rp
JOIN KREDITOREN on k.ID = r.KREDITOR_ID
JOIN REL_KREDITOR_ARTIKEL on r.id = rp.KREDITOR_ART_ID
JOIN REL_KRED_ART_PREISE on rp.KREDITOR_PREISE_ID = pr.id
JOIN (SELECT k.id, MAX(pr.SDATETIME) as Datum
FROM
KREDITOREN as k,
REL_KREDITOR_ARTIKEL as r,
KREDITOR_PREISE as pr
JOIN KREDITOREN on k.ID = r.KREDITOR_ID
JOIN REL_KREDITOR_ARTIKEL on r.KREDITOR_ART_ID = pr.KREDITOR_ART_ID
GROUP BY k.id
) k1
on k1.id = k.id
GROUP BY k.Firmenname, k.KREDITORNR, k1.Datum, pr.LISTENPREIS_NETTO, pr.EKPREIS_NETTO
ORDER BY k1.Datum;

Ergebnis meiner Abfrage ist, das ich 4 Zeilen Ergebnis bekomme, obwohl ich nur 2 Erwarte mit
jeweils eine Zeile und den aktuellen Preisen der beiden Lieferanten.

Wobei das Datum von dem Datensatz der eigentlich nicht im Ergebnis sein soll, das Datum vom Datensatz übernommen hat, das durch "JOIN (SELECT k.id, MAX(pr.SDATETIME) as Datum" als größten Datensatz selektiert wurde.

Die Tabelle "Kreditor_Preise" hat 4 Zeilen. Jeder Lieferant der beiden hat zwei Zeilen. Wobei jede Zeile ein unterschiedliches Datum hat. Also das Ergebnis soll sein 2 Zeilen, 2 Lieferanten, 2 aktuelle Preise. Also mit dem ältesten Datum.

Also zurück zu meinen eigentlichen Frage. Wie erreiche ich bei einer gruppierten Abfrage das nur der Datensatz mit dem ältesten Datum in der Ergebnismenge ist?
Wie muss ich die Tabellen umdesignen um die o.g. anfoderungen zu erfüllen?


Beispiel:
ID Datum Listenpreis Einkaufspreis
1 05.05.2017 699,00 492,70
2 13.08.2017 599,00 392,70
3 25.05.2017 749,00 654,99
4 05.09.2017 799,00 699,99


Über einen Lösungsansatz über den ich auch nachgedacht habe wäre folgender:

D Datum Listenpreis Einkaufspreis Aktiv
1 05.05.2017 699,00 492,70 0
2 13.08.2017 599,00 392,70 1
3 25.05.2017 749,00 654,99 0
4 05.09.2017 799,00 699,99 1

Halt mit einen zusätzlichen Datenfeld "Aktiv"


Danke für das Lesen, hoffe auf zahlreiche-/hilfreiche Antworten
Angehängte Grafiken
Dateityp: jpg Tabellen-Beziehungen.jpg (19,3 KB, 34x aufgerufen)

Geändert von daniel775 ( 9. Sep 2017 um 13:38 Uhr)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:45 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz