Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   DB-Abfrage: Summe über Gruppe (https://www.delphipraxis.net/176570-db-abfrage-summe-ueber-gruppe.html)

barnti 13. Sep 2013 20:28

Datenbank: Postgres • Version: 9.x • Zugriff über: pgAdmin III

DB-Abfrage: Summe über Gruppe
 
Hallo,

folgende Tabellenstruktur:

ID, Agent, URL, SpendTime, Datum der Bearbeiteitung

Da URLs mehrfach auftreten können, muss pro URL gruppiert werden. Finden Bearbeitungen an unterschiedlichen Tagen statt, so zählt es als mehrere Bearbeitungen. Bearbeitungen einer URL am gleichen Datum sind nur eine Bearbeitung.

Wie kann ich mir die Summe der Bearbeitungszeiten und die Anzahl der URLs (keine Duplikate an einem Tag) pro Agent ausgeben lassen?

scrat1979 13. Sep 2013 20:49

AW: DB-Abfrage: Summe über Gruppe
 
Es steckt besimmt ein Fehler drin, weil ich es momentan nicht testen kann, aber das Prinzip sollte stimmen :-)

Code:
SELECT URL, sum(SpendTime) as Summe
FROM TabellenName
WHERE "Datum der Bearbeiteitung" = '24.12.2013'
GROUP BY URL

barnti 13. Sep 2013 22:22

AW: DB-Abfrage: Summe über Gruppe
 
Hallo scrat1979,

ja, das Gruppieren mit Aggregatfunktion ist mir klar. Ich brauche aber ein Ergebnis pro Agent und bei dem das Datum auch berücksichtigt wird. Eine Monatsauswertung sollte pro Agent beispielhaft so ausschauen:

Name | Anzahl Bearbeitungen | Summe Bearbeitungszeit (sec)
Peter Müller, 105, 10537

Die Besonderheit: Urls sollen bei Bearbeitungen an einem Tag nur einmal gezählt werden, an unterschiedlichen Tagen mehrmals. Habe ich also am 01.08.13 zweimal die Bearbeitung der URL 'www.irgendwas.de' durch einen Agenten, so wäre das Ergebnis an diesem Tag:

Peter Müller, 1, 3600

Betrachtet man aber eine zusätzliche Bearbeitung an einem neuen Datum so wäre das Ergebnis:

Peter Müller, 2 3750

Bei der Abfrage kann ein Datumszeitraum angegeben werden so dass 1 - n Tage abgefragt werden können.

scrat1979 14. Sep 2013 18:50

AW: DB-Abfrage: Summe über Gruppe
 
Ein
Code:
SELECT DISTINCT
...
ggf. mit verschachtelter Abfrage hilft hier auch nicht?

barnti 17. Sep 2013 04:27

AW: DB-Abfrage: Summe über Gruppe
 
Hallo scrat1979,

sorry aber ich weiß nicht wie mir Deine Antwort bei meinem Problem weiterhelfen soll. Kannst Du Dich etwas ausführlicher ausdrücken?

baumina 17. Sep 2013 06:22

AW: DB-Abfrage: Summe über Gruppe
 
Ich würde es mit einer SubQuery versuchen, so in der Art:

SQL-Code:
SELECT Agent, URL, SUM(SpendTime) Bearbeitungsdauer
     , (SELECT Count(*)
          FROM Tabelle b
         WHERE a.Agent = b.Agent
           AND a.URL = b.URL
         GROUP BY Datum
       ) AnzBearb
  FROM Tabelle a
 GROUP BY Agent, URL;
ungetestet!

Furtbichler 17. Sep 2013 06:56

AW: DB-Abfrage: Summe über Gruppe
 
Die Anzahl an unterschiedlichen Datumsangaben kannst Du mit
SQL-Code:
SELECT count(distinct Datum)
(wörtlich übersetzt: "zähle unterschiedliche Datumse")zählen, wobei hier das 'Datum' ggf. als reines Datum (also ohne Zeitanteil) umzuformen ist.

Kniffelig ist hier 'Anzahl der unterschiedlichen URLs, pro Tag aber nur 1x zählen'. Das könnte man einfach lösen, indem man die URL mit dem Datum verknüpft und die unterschiedlichen Resultate zählt, also so:

SQL-Code:
select Name,
       sum(SpendTime) as SummeDerBearbeitungsZeiten,
       count(distinct datum + URL) as AnzahlURL -- 'Datum' ohne Uhrzeit als String verknüpft(konkateniert) mit URL
  from Tabelle
 group by Name
wäre mein Beitrag zum Ratespiel. Ich kenne PostGres nicht und weiß daher nicht, wie man von einem Datum nur den Datumsanteil als String formatiert und mit einem anderen String konkateniert. Das überlasse ich Dir.

@Baumina: Du gruppierst auch nach URL, das ist -glaube ich- nicht gewünscht.

barnti 17. Sep 2013 14:21

AW: DB-Abfrage: Summe über Gruppe
 
Hallo ihr zwei,

danke für euren Input. Ich habe gestern bis spät in die Nacht noch getüftelt. Sobald ich heute Zeit habe, sende ich euch mal die vorläufigen Ergebnisse.

Bis jetzt habe ich es nur durch Erzeugung eines Views und der Abfrage dieses hinbekommen.

Vielleicht geht es noch einfacher...!?

Bis später,


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:40 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