Doppelte Werte nicht anzeigen

DBNewbie

Neuer Benutzer
Beiträge
3
Hallo Zusammen,

habe folgendes Problem
Ziehe mir Daten aus 3 Tabellen
Join klappt

Problem ich bekomme Daten mehrfach ausgegeben und möchte

jede "Collinummer" zu einer "interneRef" nur einmal mit dem neuesten "Datum" und der neuesten "Zeit" ausgegeben haben

Beispiel:
Interne Referenz: 50030097 mit den Collinummern: 902715 & 902716 (je 2 Einträge)

Wie bekomme ich das hin :(
(Bestimmte Felder habe ich in der Abfrage aber gebe sie nicht aus also nicht verwirren lassen)01.jpg 02.jpg

SQL:

select b.Kundenreferenz,
c.Collinummer,
c.Ort,
a.InterneRef,
a.1 as ColliAnzahl,
a.Gewicht,
c.Datum,
c.Zeit,
c.Zaehler,
c.Vorgangsart
--a.Filiale,

--a.Abteilung
--a.InterneReferenz2
--a.Auftragsdatum

from a
join c on a.Filiale=c.Filiale and a.Abteilung=c.Filiale and a.InterneRef=c.InterneRef and
a.InterneReferenz2=c.InterneReferenz2

join b on a.Filiale=b.Filiale and a.Abteilung=b.Abteilung and a.InterneRef=b.InterneRef and
a.InterneReferenz2=b.InterneReferenz2

where a.Filiale=80807 and Abteilung='Versand' and Auftragsdatum>200101 and
Ort='REGAL1' and Vorgangsart = 'LAG'


order by InterneRef, COLLINUMMER, Datum, Zeit


***********************



01.jpg

Beispiele:
Zeile 14+16 sind doppelt und sollen nicht angezeigt werden
Zeilen 5+6+7+8 kommen mehrfach vor und nur Zeile 8 soll angezeigt werden
Kriterium: neuesestes Datum und Zeit + höchster Zähler

02.jpg
Vielen Dank für eure Mithilfe
Grüße
Erik
 
Werbung:
Warum speicherst Du Datum und Zeit in unterschiedlichen Spalten? Das macht es schon mal nicht einfacher. Warum Bilder und keine SQL-Befehle, um sich vielleicht mal die Tabellen schnell zu erzeugen? Das macht es nicht einfacher, Dir zu helfen.

jede "Collinummer" zu einer "interneRef" nur einmal mit dem neuesten "Datum" und der neuesten "Zeit" ausgegeben haben

das klingt nach einer Aggregation dieser Werte. Vermutlich willst Du also Tabelle C vor dem Joinen passend aggregieren.
 
Hallo Akretschmer,

Datum & Zeit sind leider in der DB so gespeichert.
Mit Groupby habe ich schon experimentiert und komme nicht zum gewünschten Ergebnis

Ich möchte quasi am Ende nur die Fett dargestellten Zeilen als Ergebnis haben.
Sorry, bin ein blutiger Anfänger :(




COLLINUMMER| Ort | InterneRef | ColliAnzahl | Gewicht | Datum | Zeit | ZAEHLER | Vorgangsart
--------------------- | ----------- -------------- | -------------- | ----------- | ----------- | ----------- | ------------ | ---------------|---------------
115784 | REGAL1 |49706538 | 1 | 21.1 | 201106 | 100641 | 2 | LAG
115784 | REGAL1 |49706538 | 1 | 21.1 | 201109 | 90732 | 3 | LAG
115784 | REGAL1 |49706538 | 1 | 21.1 | 201109 | 95212 | 4 | LAG
115784 | REGAL1 | 49706538 | 1 | 21.1 | 210201 | 100220 | 5 | LAG
320451 | REGAL1 | 49720164 | 1 | 9.3 | 210201 | 100436 | 2 | LAG
584926 | REGAL1 | 50009521 | 1 | 112.8 | 210201 | 101751 | 2 | LAG
814864 | REGAL1 | 50025305 | 1 | 9.3 | 210201 | 100643 | 2 | LAG
847509 | REGAL1 | 50029734 | 1 | 237.2 | 210201 | 101808 | 2 | LAG
847519 | REGAL1 | 50029760 | 1 | 49.0 | 210201 | 103213 | 2 | LAG
902715 | REGAL1 | 50030097 | 1 | 12.1 | 210201 | 103045 | 2 | LAG
902715 | REGAL1 | 50030097 | 1 | 12.1 | 210201| 103045 | 2 | LAG
902716 | REGAL1 | 50030097 | 1 | 12.1 | 210201 | 103109 | 2 | LAG
902716 | REGAL1 | 50030097 | 1 | 12.1 | 210201| 103109 | 2 | LAG
902695 | REGAL1 | 50030107 | 1 | 15.8 | 210201 | 103105 | 2 | LAG
902695 | REGAL1 | 50030107 | 1 | 15.8 | 210201| 103105 | 2 | LAG
902696 | REGAL1 | 50030107 | 1 | 15.8 | 210201 | 103048 | 2 | LAG
902696 | REGAL1 | 50030107 | 1 | 15.8 | 210201| 103048 | 2 | LAG
902697 | REGAL1 | 50030131 | 1 | 13.8 | 210201 | 103039 | 2 | LAG
902697 | REGAL1 | 50030131 | 1 | 13.8 | 210201| 103039 | 2 | LAG
902698 | REGAL1 | 50030131 | 1 | 13.8 | 210201 | 103052 | 2 | LAG
902698 | REGAL1 | 50030131 | 1 | 13.8 | 210201| 103052 | 2 | LAG
902685 | REGAL1 | 50030136 | 1 | 15.8 | 210201 | 103042 | 2 | LAG
902685 | REGAL1 | 50030136 | 1 | 15.8 | 210201 | 103042 | 2 | LAG
902686 | REGAL1 | 50030136 | 1 | 15.8 | 210201 | 103059 | 2 | LAG
902686 | REGAL1 | 50030136 | 1 | 15.8 | 210201 | 103059 | 2 | LAG
895629 | REGAL1 | 50032032 | 1 | 4.4 | 210201 | 111237 | 2 | LAG
874754 | REGAL1 | 50032035 | 1 | 316.0 | 210201 | 111201 | 2 | LAG
874753 | REGAL1 | 50032038 | 1 | 71.5 | 210201 | 111154 | 2 | LAG
144147 | REGAL1 | 50035329 | 1 | 223.0 | 210201 | 100753 | 2 | LAG
132894 | REGAL1 | 50035978 | 1 | 367.5 | 210201 | 100556 | 2 | LAG
967766 | REGAL1 | 50035994 | 1 | 13.0 | 210201 | 111213 | 2 | LAG
874231 | REGAL1 | 50036343 | 1 | 662.0 | 210201 | 111146 | 2 | LAG
874231 | REGAL1 | 50036343 | 1 | 662.0 | 210201 | 111146 | 2 | LAG
874232 | REGAL1 | 50036343 | 1 | 662.0 | 210201 | 111148 | 2 | LAG
874232 | REGAL1 | 50036343 | 1 | 662.0 | 210201 | 111148 | 2 | LAG
 

Anhänge

  • Ergebnis.txt
    3,7 KB · Aufrufe: 1
Datum & Zeit sind leider in der DB so gespeichert.
Mit Groupby habe ich schon experimentiert und komme nicht zum gewünschten Ergebnis
.. in der DB so gespeichert.
Ist das tatsächlich so oder glaubst Du es nur oder willst Du hier nur den Eindruck erwecken?

Wenn man sich "Tabelle" C so anschaut, würde man sich fragen, ob das wirklich eine Tabelle ist.
Denn sie speichert eine große Menge redundante Daten.

Das bedeutet, entweder
- ist das eine total schlecht designte Tabelle
- oder ein View
- oder ein Select Statement
- oder es ist nur Fanatsie

Um also Dein Problem zu lösen, müsste man vielleicht einen Schritt zurück treten und fragen:
Versuchst Du dort etwas "aufzudröseln", was bereits ordentlich aufgedröselt im Original vorliegt- ohne dass Du es weißt?

Gibt es jemand, der das System kennt? Sind die "Tabellen", die Du abfragst, vielleicht Interface Views oder Reporting Schnittstellen?
 
Also fangen wir mal damit an warum weshalb...

Tabelle a (enthält die Auftragsdaten)der DB befinden sich 312 Felder
Primary key ist quasi die "InterneReferenz"
Weitere Felder sind z.B. Absender Name, Adresse, Postleitzahl, Ort, Empfänger Name, Gesamtgew. der Sendung Abrechnungskennzeichen zur jeweiligen Sendung etc.

Tabelle b (Sendungsblöcke) der DB befinden sich 38 Felder
Primary Key ist die "Interne Referenz"
Weitere Felder sind z.B. Lieferscheinnummer des Kunden Einzelgewicht der Position, verpackungsarten etc.

Jede Sendung aus der Tabelle a kann mehrere Sendungsblöcke haben
D.h. 1 Sendung mit 2 Karton und 3 Kisten kann 5 Sendungsblöcke in der Tabelle b enthalten.

Tabelle c (Sendungsstatus) der Db befinden sich 35 Felder
Primary Key ist die "Interne Referenz"
Weitere Felder sind z.B. Collinummer, Art der Der Scannung (Vorgangsart)wann wurde die Sendung gescannt ("Datum" und "Zeit")

Ich will immer den letzten Scan einer Sendung mit dem entsprechenden Ort sehen.

Was passiert bei meiner Abfrage:
Zu einer Sendungsnummer (InternerneReferz) will ich die entsprechenden Collinummern und die entsprechenden Scannungen sehen

bei einer Sendung mit 5 Colli bekomme ich 5 Datensätze ausgegeben ; das ist soweit O.K.
jedes Colli wird mehrfach gescannt weil bei einer Inventur alle collis gescannt werden müssen.
Nach 3 durchgeführten Inventuren bekomme ich
bei einer Sendung mit 5 Colli 15 Datensätze aber ich will nur die letzte Scannung angezeigt bekommen d.h. nur 5 Datensätze

Nun: wie komme ich an mein Ziel?
Mit Distinct bin ich irgendwie nicht weitergekommen
Eventuell muss man ein Subselect einfügen aber ich bin da echt Neuling und habe kläglich versagt

Über das Design der DB möchte ich mich nicht äußern außer es ist halt "gewachsen"
den Rest überlasse ich Deiner Phantasie
 
Werbung:
Tabelle c (Sendungsstatus) der Db befinden sich 35 Felder
Primary Key ist die "Interne Referenz"
Weitere Felder sind z.B. Collinummer, Art der Der Scannung (Vorgangsart)wann wurde die Sendung gescannt ("Datum" und "Zeit")
Ok, das wollte ich wissen. Aus der Ferne kommt es mir redundant vor. Aber mag sein, dass es irgendeinen tieferen Sinn gibt, lauter Felder mehrfach zu speicher, ohne dass sie sich ändern.
Es wäre Doch schade, hier aufwändige Abfragen zu machen, wenn es nebenan schon separat bereit liegt.

Du musst Tabelle C aggregieren und das Maximum der Zeit ausgeben. Damit es weiterverwendbar ist, brauchst Du den PK, also die Collinummer.
Select collinummer, max(zeit) from "tabelle c" group by collinummer
Das wäre das Prinzip. Du musst sehr wahrscheinlich noch das Datum mit rein nehmen, auch wenn in Deinen Beispieldaten das Datum je Colli identisch ist.
 
Zurück
Oben