AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi SQL Abfrage: Min(Datum) + SUM(Anzahl)
Thema durchsuchen
Ansicht
Themen-Optionen

SQL Abfrage: Min(Datum) + SUM(Anzahl)

Ein Thema von Piro · begonnen am 10. Dez 2010 · letzter Beitrag vom 11. Dez 2010
Antwort Antwort
Benutzerbild von Piro
Piro

Registriert seit: 14. Jul 2003
Ort: Flintbek
810 Beiträge
 
Delphi XE2 Professional
 
#1

SQL Abfrage: Min(Datum) + SUM(Anzahl)

  Alt 10. Dez 2010, 21:58
Datenbank: MS SQL 2005 • Version: Express • Zugriff über: ADO
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
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#2

AW: SQL Abfrage: Min(Datum) + SUM(Anzahl)

  Alt 10. Dez 2010, 22:08
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...)

Geändert von jfheins (11. Dez 2010 um 15:21 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#3

AW: SQL Abfrage: Min(Datum) + SUM(Anzahl)

  Alt 10. Dez 2010, 23:13
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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von Piro
Piro

Registriert seit: 14. Jul 2003
Ort: Flintbek
810 Beiträge
 
Delphi XE2 Professional
 
#4

AW: SQL Abfrage: Min(Datum) + SUM(Anzahl)

  Alt 11. Dez 2010, 09:04
@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
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#5

AW: SQL Abfrage: Min(Datum) + SUM(Anzahl)

  Alt 11. Dez 2010, 09:31
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
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: SQL Abfrage: Min(Datum) + SUM(Anzahl)

  Alt 11. Dez 2010, 14:06
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
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Piro
Piro

Registriert seit: 14. Jul 2003
Ort: Flintbek
810 Beiträge
 
Delphi XE2 Professional
 
#7

AW: SQL Abfrage: Min(Datum) + SUM(Anzahl)

  Alt 11. Dez 2010, 15:12
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.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: SQL Abfrage: Min(Datum) + SUM(Anzahl)

  Alt 11. Dez 2010, 15:19
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]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen

Geändert von DeddyH (11. Dez 2010 um 16:39 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#9

AW: SQL Abfrage: Min(Datum) + SUM(Anzahl)

  Alt 11. Dez 2010, 15:39
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
Frederic Kerber
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: SQL Abfrage: Min(Datum) + SUM(Anzahl)

  Alt 11. Dez 2010, 15:42
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:54 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