Ergebnis auf den größten Datensatz begrenzen

master-sp

Benutzer
Beiträge
22
Hallo Gemeinde,
ich bekomme ein kleines Problem nicht gelösst.

Ich möchte nur den größten Datensatz der Istmenge augegeben bekommen. Momentan wirft mir die Abfrage alle Datensätze aus!?

SELECT max([Anzahl]) FROM [KSM].[dbo].[AuftragsdatenLogs] Where Auftrag = '765234' funktioniert. Ich bekomme aber den festen Eintrag '765234' nicht gegen die Kundenkennung ausgetauscht und in das Select (s.u.) eingesetzt. :(


SELECT ProductionPlan_1.JobID AS Kundenkennung, dbo.Matratzentyp.TypNamen AS Matrratzentyp, ProductionPlan_1.ProductionTarget AS Sollmenge, dbo.AuftragsdatenLogs.Anzahl AS Istmenge
FROM dbo.ProductionPlan AS ProductionPlan_1 INNER JOIN
dbo.Matratzentyp ON ProductionPlan_1.TypeRecordID = dbo.Matratzentyp.DatensatzID INNER JOIN
dbo.AuftragsdatenLogs ON ProductionPlan_1.JobID = dbo.AuftragsdatenLogs.Auftrag
WHERE (ProductionPlan_1.Status < 3)



Meine Ausgabe sieht folgendermaßen aus, suche aber nur nach dem Datensatz mit der größten Zahl (also 10) ...

765234 VADSO 138 3
765234 VADSO 138 4
765234 VADSO 138 5
765234 VADSO 138 6
765234 VADSO 138 7
765234 VADSO 138 8
765234 VADSO 138 9
765234 VADSO 138 10


Für Tipps und Tricks bin ich offen 👍
 
Werbung:
Code:
order by zahl desc limit 1;

ist der Trick ;)

Erklärung:
Order by sortiert nach alphabet, stellenwert, etc.
das DESC bedeutet einfach nur absteigend anstatt (wie default) aufsteigend
das LIMIT begrenzt die ausgegebenen Werte auf ein Maximum, du möchtest nur einen, von daher also mit 1...

;)
 
Ah, Sorry !

Es gibt mehrere Datensätze die gefunden werden! Aber es soll jeweils von der gefundenen "Kundenkennung" nur jeweils der Datensatz mit der max(Anzahl) angezeigt werden.

Ausgabe sollte dann folgend aussehen:

765437 Toledo 432 99
765238 Kusa 298 88
765234 VADSO 138 10
 
erzähl ein wenig den hintergrund, ich denke es geht mittels group by, bin mir aber nicht sicher, wie deine Datenbank strukturiert ist, undd es damit funktioniert.
 
Also im Grunde gibt es eine Tabelle "ProductionPlan" die aus einer zweiten Tabelle den ASCII Namen ausließt und anschließend nur Datensätze mit dem Status < 3 anzeigt.

Grundansicht.PNG

Nun möchte ich aus einer dritten Tabelle nach dem Datensatz suchen, in der die Kundenkennung vorkommt und der den größten Wert enthält.

SELECT max([Anzahl]) FROM [KSM].[dbo].[AuftragsdatenLogs] Where Auftrag = '765234'

Dieses Anzahl = 55 soll als Feld "Istwert" in der ersten Abfrage mit dem Richtigen Ergebnis Angezeigt werden.

1666704273426.png

Grüße an die Gemeinde
 
Nun möchte ich aus einer dritten Tabelle nach dem Datensatz suchen, in der die Kundenkennung vorkommt und der den größten Wert enthält.

SELECT max([Anzahl]) FROM [KSM].[dbo].[AuftragsdatenLogs] Where Auftrag = '765234'

Dieses Anzahl = 55 soll als Feld "Istwert" in der ersten Abfrage mit dem Richtigen Ergebnis Angezeigt werden.


OK, ist gelöst !

Der Ansatz für die Lösung ...

Die WHERE-Klausel weiß nichts über Zeilen in der Tabelle außer der aktuellen Zeile. Wie kann man also den Maximalwert über eine ganze Reihe von Zeilen bestimmen?

SELECT blah
FROM table
WHERE attribute = (SELECT MAX(expresion) FROM table1)
 
Wenn
SELECT blah
FROM table
WHERE attribute = (SELECT MAX(expresion) FROM table1)
Gute Idee, aber nicht optimal umgesetzt.

Ich habe Deine konkrete Konstellation nicht ganz verstanden bzw. wird sie aus der Schilderung für mich nicht hinreichend klar. Daher habe ich Dir ein Beispiel gemacht, das zeigt, wie Aggregate allgemein weiterverwendet werden können.
Dein Ansatz oben ist im Prinzip ok, aber er taugt so offensichtlich nur für spezifische Einzelwerte, nicht für weitere Dimensionen (Tuple bzw n-Tuple), zumindest nicht bei DB die an der Stelle keine n-Tuple verarbeiten können wie MS SQL anscheinend.

Zum theoretischen Problem
Bei allen Aggregat Abfragen hast Du das Problem, dass die Aggregation prinzipbedingt Detailinformationen verwirft, sonst wäre sie kein Aggregat. Daher besteht der Einsatz dieser Abfragen häufig in 2 Schritten:
- bilde das gewünschte Aggregat
- ordne es erneut der Ausgangsmenge zu

Hier ist das Beispiel für Dich:
Es arbeitet im Wesentlichen auf einer relativ beliebigen Verkaufszahlentabelle, die es so wahrscheinlich nicht geben sollte. Und zur beispielhaften Anschaulichkeit ist eine Kundentabelle dazu gebaut.
 
Werbung:
Wenn

Gute Idee, aber nicht optimal umgesetzt.

Ich habe Deine konkrete Konstellation nicht ganz verstanden bzw. wird sie aus der Schilderung für mich nicht hinreichend klar. Daher habe ich Dir ein Beispiel gemacht, das zeigt, wie Aggregate allgemein weiterverwendet werden können.
Dein Ansatz oben ist im Prinzip ok, aber er taugt so offensichtlich nur für spezifische Einzelwerte, nicht für weitere Dimensionen (Tuple bzw n-Tuple), zumindest nicht bei DB die an der Stelle keine n-Tuple verarbeiten können wie MS SQL anscheinend.

Zum theoretischen Problem
Bei allen Aggregat Abfragen hast Du das Problem, dass die Aggregation prinzipbedingt Detailinformationen verwirft, sonst wäre sie kein Aggregat. Daher besteht der Einsatz dieser Abfragen häufig in 2 Schritten:
- bilde das gewünschte Aggregat
- ordne es erneut der Ausgangsmenge zu

Hier ist das Beispiel für Dich:
Es arbeitet im Wesentlichen auf einer relativ beliebigen Verkaufszahlentabelle, die es so wahrscheinlich nicht geben sollte. Und zur beispielhaften Anschaulichkeit ist eine Kundentabelle dazu gebaut.
Vielen Dank für Deine Ausführungen ... ich habe diese mit Interesse gelesen! Die funktionellen Einwände kann ich nachvollziehen und ich schau mir deinen Link gerne nochmals genauer an.

Das sind die Postings die ein gutes Forum ausmachen !!
 
Zurück
Oben