amokk2k 10 Geschrieben 12. August 2012 Melden Teilen Geschrieben 12. August 2012 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? Zitieren Link zu diesem Kommentar
bla!zilla 10 Geschrieben 12. August 2012 Melden Teilen Geschrieben 12. August 2012 Poste bitte mal die Abfrage die du absetzt. Zitieren Link zu diesem Kommentar
amokk2k 10 Geschrieben 12. August 2012 Autor Melden Teilen Geschrieben 12. August 2012 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 Zitieren Link zu diesem Kommentar
zahni 554 Geschrieben 12. August 2012 Melden Teilen Geschrieben 12. August 2012 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) Zitieren Link zu diesem Kommentar
hh2000 10 Geschrieben 13. August 2012 Melden Teilen Geschrieben 13. August 2012 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 Zitieren Link zu diesem Kommentar
zahni 554 Geschrieben 13. August 2012 Melden Teilen Geschrieben 13. August 2012 Das sollte auch nur ein Denkanstoß sein ;) Zitieren Link zu diesem Kommentar
amokk2k 10 Geschrieben 13. August 2012 Autor Melden Teilen Geschrieben 13. August 2012 Also im Ansatz glaub ich habe ich verstanden worauf du hinaus willst, allerdings kriege ich das so nicht hin... Zitieren Link zu diesem Kommentar
hh2000 10 Geschrieben 14. August 2012 Melden Teilen Geschrieben 14. August 2012 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 Zitieren Link zu diesem Kommentar
amokk2k 10 Geschrieben 15. August 2012 Autor Melden Teilen Geschrieben 15. August 2012 hh2000!!! DANKE DIR Hat funktioniert! Super! Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.