Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL Abfrage: Min(Datum) + SUM(Anzahl) (https://www.delphipraxis.net/156687-sql-abfrage-min-datum-sum-anzahl.html)

Piro 10. Dez 2010 21:58

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:
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
Ich möchte gerne die Summe der Anzahl jeder gleichen SNR und das frühste DATUM in einer Zeile.
Code:
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
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.

Kann mir da einer helfen. Für Ansätze oder Tipps oder Vorschläge wäre ich dankbar.

Gruß, Sven

jfheins 10. Dez 2010 22:08

AW: SQL Abfrage: Min(Datum) + SUM(Anzahl)
 
Ich nehme mal an, du hast nach SNR gruppiert?
SQL-Code:
select *, min(datum),sum(anzahl) from xyz
group by snr
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.

(Zumindest mit einer Query...)

p80286 10. Dez 2010 23:13

AW: SQL Abfrage: Min(Datum) + SUM(Anzahl)
 
Ich denke daß Du mit soetwas zum Ziel kommen könntest:
Code:
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
gruß
K-H

Piro 11. Dez 2010 09:04

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

Bummi 11. Dez 2010 09:31

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

DeddyH 11. Dez 2010 14:06

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

Piro 11. Dez 2010 15:12

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.

DeddyH 11. Dez 2010 15:19

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]

fkerber 11. Dez 2010 15:39

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

DeddyH 11. Dez 2010 15:42

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 03:19 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz