Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi DateTime nach Wochentag gruppieren (https://www.delphipraxis.net/150739-datetime-nach-wochentag-gruppieren.html)

Privateer3000 25. Apr 2010 16:18


DateTime nach Wochentag gruppieren
 
Hi folk,

aus einer SQL-Abfrage enstehend, habe ich mehrere Objekte im DateTime-Format.
Wie kann man das so gruppieren, dass die Wochentage zusammengefasst und als solche
angezeigt werden?
Abgefragt werden die Anzahl der Messwerte und das Datum:
in etwa so:
Delphi-Quellcode:
Select sum(anzahl) FROM messwerte WHERE indate > :MD1

DeddyH 25. Apr 2010 16:21

Re: DateTime nach Wochentag gruppieren
 
Welches DBMS? AFAIK gibt es da keinen standardisierten SQL-Befehl für (ich kann mich aber auch irren).

Privateer3000 25. Apr 2010 17:57

Re: DateTime nach Wochentag gruppieren
 
Hi DeddyH
ich habe daran noch garnicht gedacht, dies in der SQL-Zeile
zu bearbeiten. Deshalb habe ich es auch nicht im Datenbank-Forum
geschrieben. Eher dachte ich an Delphicode.
Aber ok. Wenn das geht, ich greife per ADO auf mdb zu.

DeddyH 25. Apr 2010 18:10

Re: DateTime nach Wochentag gruppieren
 
Wie sieht es so aus?
SQL-Code:
SELECT DATENAME(dw,indate), SUM(anzahl)
FROM messwerte
WHERE indate > :MD1
GROUP BY DATENAME(dw,indate)
Ungetestet, da kein MS-SQL zur Verfügung.

Privateer3000 25. Apr 2010 18:46

Re: DateTime nach Wochentag gruppieren
 
Danke erstmal,
kann es jetzt nicht gleich ausprobieren.
Melde mich dann hier wieder

omata 25. Apr 2010 23:23

Re: DateTime nach Wochentag gruppieren
 
SQL-Code:
SELECT YEAR(indate) AS jahr,
       MONTH(indate) AS monat,
       DAY(indate) AS tag,
       SUM(anzahl) AS anzahl
FROM messwerte
WHERE indate > :MD1 
GROUP BY YEAR(indate), MONTH(indate), DAY(indate)
SQL-Code:
SELECT DateSerial(YEAR(indate), MONTH(indate), DAY(indate)) AS datum,
       SUM(anzahl) AS anzahl
FROM messwerte
WHERE indate > :MD1 
GROUP BY YEAR(indate), MONTH(indate), DAY(indate)

Privateer3000 26. Apr 2010 13:54

Re: DateTime nach Wochentag gruppieren
 
Danke omata, das sieht plausibel aus.
Werde es testen!

Privateer3000 26. Apr 2010 21:12

Re: DateTime nach Wochentag gruppieren
 
Beim Testen fiel mir auf, dass ich den Wochentag gruppieren will.
Nicht den Tag im Monat.
Ich glaube das dies nicht mit einem SQL-String zubewerkstelligen ist.
Folglich müssen alle Ergebnisse mit Shortdaynames auseinandergenommen werden.
Aber wie?

rawi 26. Apr 2010 21:55

Re: DateTime nach Wochentag gruppieren
 
Bei Access gibt es doch die Funktion Wochentag oder weekday. Weiß allerdings nicht ob die in allen Access-Versionen zur Verfügung steht.

Delphi-Quellcode:
... GROUP BY Weekday([dateingang]);
Funktioniert wenn ich das einer ADO-Query im SQL-String mit auf den Weg gebe. Getestet mit Access 2007.

Privateer3000 27. Apr 2010 10:46

Re: DateTime nach Wochentag gruppieren
 
Danke, hab dann auch mal die Access-Hilfe "bemüht" :wall: .
Tatsächlich gibt es diese Funktion.
Nur ist der Rückgabewert ein Integer.
Wen es interessiert, gelöst habe ich das so:
Delphi-Quellcode:
...
Stringlist 'Montag','Dienstag'....
...
SQL.Text:='SELECT sum(anzahl) AS einzelmessung, WEEKDAY(insdate,2) AS Tag'+//2 für Montag
           ' FROM messwerte';
          if nutzdatum.Checked = True then
           SQL.Add(' WHERE A.insdate > HT1');
           SQL.Add(' GROUP BY WEEKDAY(insdate,2)');
...
while not EOF do begin
  analyse.Form7.zf_wochentage.Lines.Add(wotas[fieldbyname('Tag').AsInteger]+':');
  analyse.Form7.zf_wotage_um.Lines.Add(format('%f',[fieldbyname('einzelmessung').AsFloat]));
  analyse.Form7.Chart1.Series[0].Add(fieldbyname('einzelmessung').AsFloat,wotas[fieldbyname('Tag').AsInteger]);
  Next;
 end;
...
Vielen Dank für die Hilfe


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:12 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-2025 by Thomas Breitkreuz