Jump to content

MSSQL Abfrage - Max


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hallo Zusammen,

 

ich habe eine Tabelle mit folgendem Aufbau

 

ID|Name|Datum|Uhrzeit|Wert

---------------------------

1|Test|01.01.2000|11:11:11|100

2|Test|01.01.2000|11:12:11|111

 

 

Ich möchte gerne den MAX Wert pro Tag haben. Das funktioniert auch soweit, aber nur wenn ich

die Felder Name und Datum in der Abfrage gruppiere. Jetzt brauche ich die Uhrzeit und das kriege ich nicht hin. Dann bekomme ich immer alle Rows, da sich das irgendwie nicht gruppieren lässt.

 

Hat jemand eine Idee?

Link zu diesem Kommentar

SELECT     TOP (100) PERCENT Datum, ItemName, MAX(ItemValue) AS MaxItemValue
FROM         dbo.tblTest
GROUP BY Datum, ItemName
ORDER BY Datum

 

 

Jetzt möchte ich halt noch die passende Uhrzeit haben.

Wenn ich aber jetzt folgendes absetze, dann funktioniert es halt nicht mehr.

 

SELECT     TOP (100) PERCENT Datum, ItemName, MAX(ItemValue) AS MaxItemValue, Uhrzeit
FROM         dbo.tblTest
GROUP BY Datum, ItemName, Uhrzeit
ORDER BY Datum

Link zu diesem Kommentar

Deine Query kann so nicht funktionierenm es sei denn, Du willst in allen Rows den Max-Wert der Spalte erhalten.

 

Eine Möglichkeit: Du ermittelst mit einer Query den MAX Wert der gewünschten Spalte "SELECT MAX(column_name) FROM table_name" und nimmst Dieses Ergebnis als Subselect in der Where-Clausel.

 

Also:

 

SELECT Datum, ItemName, ItemValue, Uhrzeit

FROM dbo.tblTest

where itemvalue = (select max(ItemValue) from dbo.tblTest)

Link zu diesem Kommentar

Moin,

 

SELECT Datum, ItemName, ItemValue, Uhrzeit

FROM dbo.tblTest

where itemvalue = (select max(ItemValue) from dbo.tblTest)

 

das gibt leider nur eine Zeile zurück, da die Unterabfrage nur eine Zeile liefert (den MaxWert von ItemValue der gesamten Tabelle).

 

 

Die Unterabfrage muss mit der Hauptabfrage korrelieren, z.B. so:

SELECT a.Datum, a.ItemValue, a.Uhrzeit
FROM tblTest a
INNER JOIN (
	SELECT  Datum, MAX(ItemValue) AS maxIV
	FROM tblTest
	GROUP BY Datum
) b
ON a.Datum = b.Datum
AND a.ItemValue = b.maxIV

 

Die "Tabelle b" (eigentlich eine Abfrage) liefert den MaxWert pro Datum.

Dieses Hilfskonstrukt dient der Auswahl der entsprechenden Datensätze (Max(ItemValue) pro Datum).

Durch den JOIN mit der "Tabelle a" können aber nun auf alle Spalten

in "Tabelle a" zugegriffen werden.

 

Gruß Kai

Link zu diesem Kommentar

Moin,

 

Das sollte auch nur ein Denkanstoß sein ;)

 

ja das hab ich mir schon gedacht :-)

Ich fand dann die Fragestellung spannend und wollte die dann auch komplett lösen.

Also im Ansatz glaub ich habe ich verstanden worauf du hinaus willst, allerdings kriege ich das so nicht hin...

 

Guck Dir mal das Ergebnis der Abfrage mit dem Group By separat an.

Das gibt Dir eine Tabelle zurück, die das Datum und den Maxwert in einer Zeile liefert.

 

- INNER JOIN (siehe Onlinehilfe) verknüpft 2 oder mehr Tabellen miteinander

- Die Schreibweise (SELECT ... ) b "übergibt" das Ergebnis an "INNER JOIN", der das Ergebnis wie eine Tabelle behandelt.

 

Komplette Tabelle ("a") enthält z.B.

Datum Uhr Wert

12.05.2012 11:15 47

12.05.2012 12:25 11

12.05.2012 11:58 55

 

Unser View ("b") enthält dann:

Datum Wert

12.05.2012 55

 

nun JOINe beide miteinander mittels Datum und Uhrzeit (siehe ON im INNER JOIN-Statement), stell Dir beide Ergebnisse nebeneinander vor:

 

a b

a.Datum a.Uhr a.Wert b.Datum b.Wert

12.05.2012 11:15 47

12.05.2012 11:25 11

12.05.2012 11:58 55 12.05.2012 55 <- Treffer des INNER JOIN

 

da hast du nun die eine Zeile

 

12.05.2012 11:58 55

 

als Ergebnis vorliegen (Doppelte Zeilen können bei gleichen MaxWerten pro Datum auftreten).

 

Gruß Kai

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...