Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi ältester Eintrag - Summieren (https://www.delphipraxis.net/166649-aeltester-eintrag-summieren.html)

handson 23. Feb 2012 09:24

Datenbank: MySQL • Version: 5.0 • Zugriff über: microOLAP DAC

ältester Eintrag - Summieren
 
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

schlecki 23. Feb 2012 10:02

AW: ältester Eintrag - Summieren
 
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...

DeddyH 23. Feb 2012 10:10

AW: ältester Eintrag - Summieren
 
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.

Bummi 23. Feb 2012 10:12

AW: ältester Eintrag - Summieren
 
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

handson 23. Feb 2012 10:15

AW: ältester Eintrag - Summieren
 
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...

DeddyH 23. Feb 2012 10:26

AW: ältester Eintrag - Summieren
 
Hast Du #3 ausprobiert, das sollte eigentlich genau das liefern (ich hab hier nur gerade kein MySQL verfügbar)?

Iwo Asnet 23. Feb 2012 10:33

AW: ältester Eintrag - Summieren
 
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.

handson 23. Feb 2012 10:34

AW: ältester Eintrag - Summieren
 
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...

DeddyH 23. Feb 2012 10:35

AW: ältester Eintrag - Summieren
 
Aggregatfunktion ohne Gruppierung? Das geht wohl nur in MySQL.

[edit] @handson: dann setz mal entsprechende Indizes [/edit]

handson 23. Feb 2012 10:46

AW: ältester Eintrag - Summieren
 
Ja, die Sub-Querys laufen auch über die Indizes, aber bei der PRIMARY geht er nicht über einen Index, wie auch...?


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:14 Uhr.
Seite 1 von 2  1 2      

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