![]() |
Datenbank: MS SQL 2005 • Version: Express • Zugriff über: ADO
SQL Abfrage: Min(Datum) + SUM(Anzahl)
Moin zusammen,
ich hoffe Ihr könnt mir helfen. Ich habe folgenden Daten
Code:
Ich möchte gerne die Summe der Anzahl jeder gleichen SNR und das frühste DATUM in einer Zeile.
KTR ZNR SNR DATUM ANZAHL DATUM2 QUELLE
--------------------------------------------------------------------- 999999 099 111111111 20.12.2010 1 01.01.2011 1 999999 099 111111111 05.09.2010 3 03.12.2010 1 999999 099 111111111 20.01.2011 6 10.12.2010 2 999999 099 222222222 20.12.2010 2 20.03.2010 3 999999 099 222222222 25.12.2010 4 30.12.2010 3 999999 099 333333333 09.09.2009 3 11.12.2010 5 999999 099 333333333 20.12.2010 8 18.11.2010 4 999999 099 444444444 20.12.2010 8 19.10.2010 2
Code:
Mit MIN(DATUM) und SUM(ANZAHL) erhalte ich die geforderten Werte. Aber leider nur einzeln. Ich bekomme es aber nicht hin, die Abfrage so zu gestallten, dass mein gewünschtes Ergebnis raus kommt.
KTR ZNR SNR DATUM ANZAHL DATUM2 QUELLE
--------------------------------------------------------------------- 999999 099 111111111 05.09.2010 10 03.12.2010 1 999999 099 222222222 20.12.2010 6 20.03.2010 3 999999 099 333333333 09.09.2009 11 11.12.2010 5 999999 099 444444444 20.12.2010 8 19.10.2010 2 Kann mir da einer helfen. Für Ansätze oder Tipps oder Vorschläge wäre ich dankbar. Gruß, Sven |
AW: SQL Abfrage: Min(Datum) + SUM(Anzahl)
Ich nehme mal an, du hast nach SNR gruppiert?
SQL-Code:
Dann ist das was da rauskommt afaik das höchste der Gefühle. Denn jede zeile ist ja eigentlich eine "Gruppe" und deshalb darf es eigentlich nur Felder geben, nach denen gruppiert wurde oder Felder, die aggregiert wurden.
select *, min(datum),sum(anzahl) from xyz
group by snr (Zumindest mit einer Query...) |
AW: SQL Abfrage: Min(Datum) + SUM(Anzahl)
Ich denke daß Du mit soetwas zum Ziel kommen könntest:
Code:
gruß
select sum(anzahl),mindat,snr
from table1,(select min(datum) "mindat",snr from table1 group by snr) table2 from table1,table2 where table1.snr=table2.snr K-H |
AW: SQL Abfrage: Min(Datum) + SUM(Anzahl)
@jfheins: deine Lösung hat geklappt aber ohne *. Ich kann mir leider nur die genannten Spalten anzeigen. Wenn ich den * eingeben kommt ein Fehler, dass es nicht geht.
@p80286: Deine Lösung konnte ich noch nicht testen aber ich verstehe die Sache mit den beiden Tabellen nicht. Ich habe doch nur eine. Sorry für die Frage. Mein Ziel ist frühstes Datum, Summe der Anzahl für die gleiche SNR. Alle Felder des Datensatzes mit dem frühstem Datum und der Summer der Anzahl. Ich hoffe es klappt, wenn nicht, muss ich etwas umständlicher programmieren (also etwas mehr Aufwand) Danke schon mal für eure Antworten |
AW: SQL Abfrage: Min(Datum) + SUM(Anzahl)
UNTESTED:
Code:
Select xyz.*,a.Anzahl from
xyz join ( select snr, min(datum) as Datum,sum(anzahl) as Anzahl from xyz group by snr ) a on a.snr=xyz.snr and a.Datum=xyz.Datum |
AW: SQL Abfrage: Min(Datum) + SUM(Anzahl)
Unter Firebird ausprobiert:
SQL-Code:
SELECT
A.KTR, A.ZNR, A.SNR, A.Datum, (SELECT SUM(Anzahl) FROM tabelle WHERE SNR = A.SNR) AS Anzahl, A.Datum2, A.Quelle FROM Tabelle A WHERE A.datum = (SELECT MIN(Datum) FROM Tabelle WHERE SNR = A.SNR) ORDER BY A.SNR |
AW: SQL Abfrage: Min(Datum) + SUM(Anzahl)
Danke an alle, die geantwortet haben.
Die letzten beiden Lösungen waren erfolgreich und brachten das Ergebnis. Welche soll ich denn jetzt eher verwenden in Bezug auf Performance oder ist das egal. Danke schon mal. |
AW: SQL Abfrage: Min(Datum) + SUM(Anzahl)
Ich könnte mir vorstellen, dss die JOIN-Lösung einen Tick schneller ist, bin mir aber nicht sicher. Wenn Du Gewissheit brauchst, kannst Du doch beide Vorschläge einmal auf einen großen Datenbestand loslassen und die Zeiten vergleichen, dann weißt Du es ;)
[edit] Was aber einen Schub bringen könnte: Index auf Datum setzen [/edit] |
AW: SQL Abfrage: Min(Datum) + SUM(Anzahl)
Hi,
was mir nicht so ganz klar ist (und auch der Grund für den Fehler bei * ist afaik) - welcher Wert soll denn für Datum2 und Quelle übernohmen werden? LG, Frederic |
AW: SQL Abfrage: Min(Datum) + SUM(Anzahl)
Die Frage hatte ich mir auch gestellt und bin dann anhand des Beispielergebnisses zu dem Schluss gekommen, dass es die des Datensatzes mit dem jeweilig kleinsten Datum sein sollen.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:54 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