AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi ältester Eintrag - Summieren
Thema durchsuchen
Ansicht
Themen-Optionen

ältester Eintrag - Summieren

Ein Thema von handson · begonnen am 23. Feb 2012 · letzter Beitrag vom 24. Feb 2012
Antwort Antwort
Seite 1 von 2  1 2      
handson

Registriert seit: 18. Jan 2007
Ort: Delmenhorst
113 Beiträge
 
Delphi 2007 Professional
 
#1

ältester Eintrag - Summieren

  Alt 23. Feb 2012, 10:24
Datenbank: MySQL • Version: 5.0 • Zugriff über: microOLAP DAC
Hallo!

Ich beiß mir gerade an einem SQL-Statement die Zähne aus. Vielleicht hat ja jemand eine Idee für mich.

Ich habe eine Tabelle, wo Rechnungsinformationen gespeichert werden: Rechnungsnummer, KundenNr, Datum, Gesamtpreis, etc. Ich möchte gerne eine Liste haben, wo alle Jahre der ältesten Einträge stehen mit Summe, d.h. z.B. 2000 100 Neu-Kunden (die in diesem Jahr als erstes bestellt haben). Die dürfen dann auch nicht mehr in den Jahre auftauchen. Man hat quasi eine Neukunden-Liste anhand der Jahre.

Vielen Dank im Voraus!

Stephan
Stephan Faust
  Mit Zitat antworten Zitat
schlecki

Registriert seit: 11. Apr 2005
Ort: Darmstadt
148 Beiträge
 
Delphi XE2 Enterprise
 
#2

AW: ältester Eintrag - Summieren

  Alt 23. Feb 2012, 11:02
da die meisten Glaskugeln wegen einer Rückrufaktion des Herstellers nicht verfügbar sind, wäre es gut, ein paar mehr Informationen zu bekommen.

Etwa die Struktur der beteiligten Tabellen und was du bisher versucht hast. Optimalerweise gibst du gleich noch ein paar Testfälle an...
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#3

AW: ältester Eintrag - Summieren

  Alt 23. Feb 2012, 11:10
Evtl. so?
SQL-Code:
SELECT
  YEAR(X.Datum), COUNT(*)
FROM(
  SELECT
    Datum, KundenNr
  FROM
    Rechnungstabelle R
  WHERE
    Datum = (
      SELECT
        MIN(Datum)
      FROM
        Rechnungstabelle
      WHERE
        KundenNr = R.KundenNr
    )) X
GROUP BY
  YEAR(X.Datum)
ORDER BY
  YEAR(X.Datum)
Das sollte die Anzahl der Kunden je Jahr liefern, die vorher noch nie bestellt haben. Ich hoffe, ich habe die Aufgabenstellung richtig verstanden.
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 Bummi
Bummi

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

AW: ältester Eintrag - Summieren

  Alt 23. Feb 2012, 11:12
Keine Ahnung ob MySQL so was verdaut, bei mir MSSQL funktioniert folgendes

(Aulirema =Rechungen, Akpos = Rechnungspositionen)
Code:

Select g.Kdnr,g.Jahr,SUM(VKEuro) from dbo.Akpos p
Join Aulirema r on r.Nummer=p.Nummer
Join
(
Select Kdnr,Min(Year(Datum)) as Jahr from Aulirema
group by Kdnr
) g on g.Kdnr=r.Kdnr and g.Jahr= Year(r.Datum)
group by g.Kdnr,g.Jahr
order by g.Jahr,g.Kdnr
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
handson

Registriert seit: 18. Jan 2007
Ort: Delmenhorst
113 Beiträge
 
Delphi 2007 Professional
 
#5

AW: ältester Eintrag - Summieren

  Alt 23. Feb 2012, 11:15
Ok, ein paar Datenbeispiele:

RechNr KundenNr Datum Betrag
100001 10000 20.01.2000 100.00
100002 10000 01.02.2001 50.00
100003 10001 05.03.2009 10.00
100004 10002 01.01.2000 20.00
100005 10002 10.09.2008 10.00
100006 10003 08.08.2010 15.00

Erbnis soll so aussehen:

Jahr Anzahl
2000 2
2009 1
2010 1

Ich hoffe das ist jetzt etwas verständlicher...
Stephan Faust
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#6

AW: ältester Eintrag - Summieren

  Alt 23. Feb 2012, 11:26
Hast Du #3 ausprobiert, das sollte eigentlich genau das liefern (ich hab hier nur gerade kein MySQL verfügbar)?
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
Iwo Asnet

Registriert seit: 11. Jun 2011
313 Beiträge
 
#7

AW: ältester Eintrag - Summieren

  Alt 23. Feb 2012, 11:33
Noch kürzer.
Code:
select JahrDerErstenRechnung, Count (*)
  from (
   Select Kundennummer, min (Year(Rechnungsdatum)) as JahrDerErstenRechnung
     from Rechnungstabelle
     group by Kundennummer
   )
group by JahrDerErstenRechnung -- <<<<< Das fehlt wohl
Je Kunde das Jahr der ersten Rechnung und dann über diese Tabelle je JahrDerErstenRechnung die Datensätze zählen.

Geändert von Iwo Asnet (23. Feb 2012 um 13:47 Uhr) Grund: Fehlendes Group By eingefügt...
  Mit Zitat antworten Zitat
handson

Registriert seit: 18. Jan 2007
Ort: Delmenhorst
113 Beiträge
 
Delphi 2007 Professional
 
#8

AW: ältester Eintrag - Summieren

  Alt 23. Feb 2012, 11:34
Ja, das scheint zu laufen. Allerdings habe ich jetzt das Problem, dass die Abfrage sehr lange läuft. Habe es jetzt nach ein paar Minuten abgebrochen. Die Tabelle hat etwas mehr als eine Million Datensätze...
Stephan Faust
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#9

AW: ältester Eintrag - Summieren

  Alt 23. Feb 2012, 11:35
Aggregatfunktion ohne Gruppierung? Das geht wohl nur in MySQL.

[edit] @handson: dann setz mal entsprechende Indizes [/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
  Mit Zitat antworten Zitat
handson

Registriert seit: 18. Jan 2007
Ort: Delmenhorst
113 Beiträge
 
Delphi 2007 Professional
 
#10

AW: ältester Eintrag - Summieren

  Alt 23. Feb 2012, 11:46
Ja, die Sub-Querys laufen auch über die Indizes, aber bei der PRIMARY geht er nicht über einen Index, wie auch...?
Stephan Faust
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 17:51 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