Mittelwert mit Zähler

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

der_Zerstreute
***
Beiträge: 62
Registriert: Do, 01.05.2008 11:33

Mittelwert mit Zähler

Beitrag von der_Zerstreute »

Hallo Leute ,

ich bastel im Moment an einer Projekt Datenbank.

diese Datenbank enthält u.a. folgende Felder

* Projekt
* start (timestamp)
* stop (timestamp)
* fertig (binär)


nun möchte ich gruppiert nach Projekt den durchschnittlichen Zeitaufwand pro Projekt ermitteln indem ich die Summe aller Zeitdifferenzen bilde und durch die Anzahl der "Fertig" Bits dividiere.

Das Gruppieren und Summieren ist nicht das Problem . Mein Problem besteht jetzt darin das ich nicht so recht herraus bekomme wie ich die "Fertig" Bits zähle, in Abhängigkeit vom Projekt.

für Hilfestellungen oder Tips wäre ich sehr dankbar
d.Z.
Gert Seler
*******
Beiträge: 1763
Registriert: Di, 03.10.2006 18:05

Re: Mittelwert mit Zähler

Beitrag von Gert Seler »

Hallo d.z.,
Projekte gibt es viele (z.B. Hausbau; Produktfertigung; Straßenbau; Expeditionen usw) Projekt_Möglichkeiten.
Da solltest Du uns doch verraten, welches "Projekt" Du planst. Ebenso möchte ich wissen, was das Feld "fertig" darstellt und was dies mit "bits"
zu tun hat.
Welche "Gruppierungen" sollen erstellt werden ?

mfg
Gert
Es gibt nichts gutes, außer man tut es.
Win7_64 / LO_4.4.5.2
der_Zerstreute
***
Beiträge: 62
Registriert: Do, 01.05.2008 11:33

Re: Mittelwert mit Zähler

Beitrag von der_Zerstreute »

Gert Seler hat geschrieben:Hallo d.z.,
Projekte gibt es viele (z.B. Hausbau; Produktfertigung; Straßenbau; Expeditionen usw) Projekt_Möglichkeiten.
Da solltest Du uns doch verraten, welches "Projekt" Du planst. Ebenso möchte ich wissen, was das Feld "fertig" darstellt und was dies mit "bits"
zu tun hat.
Welche "Gruppierungen" sollen erstellt werden ?

mfg
Gert

hallo Gert,

also, die Auflistung am Anfang betitelt die Felder.

Projekt = Textfeld mit Projektnamen
start,Stop = Timestamp Feld wird automatisch eingetragen
fertig = Binärfeld wird gesetzt wenn das Projekt abgeschlossen ist.

Gruppiert wird wie am Anfang des Themas beschrieben nach dem Projektnamen.

hoffe das hilft etwas zum Verständnis meines Problems.

Gruß
Daniel
Barlee
******
Beiträge: 767
Registriert: Sa, 17.12.2005 12:27

Re: Mittelwert mit Zähler

Beitrag von Barlee »

Hallo Zerstreuter,

erstmal eine Frage. Warum Binärfeld? Wenn der Status des Projekts eingetragen wird, dann reicht doch BOOLEAN. Projekt fertig = TRUE
Dann könnte man das in der Art aufbauen:

Code: Alles auswählen

SELECT Projekt_ID, COUNT(Fertig) FROM [Tabelle] WHERE Fertig = 'TRUE'
GROUP BY Projekt_ID
Gruß Barlee
der_Zerstreute
***
Beiträge: 62
Registriert: Do, 01.05.2008 11:33

Re: Mittelwert mit Zähler

Beitrag von der_Zerstreute »

Barlee hat geschrieben:Hallo Zerstreuter,

erstmal eine Frage. Warum Binärfeld? Wenn der Status des Projekts eingetragen wird, dann reicht doch BOOLEAN. Projekt fertig = TRUE
Dann könnte man das in der Art aufbauen:

Code: Alles auswählen

SELECT Projekt_ID, COUNT(Fertig) FROM [Tabelle] WHERE Fertig = 'TRUE'
GROUP BY Projekt_ID
Gruß Barlee

Hallo Barlee,

Binär = Boolean da binär ja auch nur 1 oder 0 also ja oder nein , wahr oder falsch entspricht !!
Generell aber könnte dein Vorschlag die Lösung meines Problems sein .

----

Nachtrag :

Ich habe nun die Formel mal an meine Formate/Zellnamen angepasst nur bekomm ich das innerhalb der Abfragen nicht zum Laufen. OOo Base meldet dann er könne den Zelleninhalt nicht auslesen.

wie kann ich das direkt in den Feldbereich eintragen !?

Danke für deine Hilfe schonmal
ich werde diesen Vorschlag mal ausprobieren
Barlee
******
Beiträge: 767
Registriert: Sa, 17.12.2005 12:27

Re: Mittelwert mit Zähler

Beitrag von Barlee »

Hallo Zerstreuter,
OOo Base meldet dann er könne den Zelleninhalt nicht auslesen.
wie kann ich das direkt in den Feldbereich eintragen !?
Heißt das, Du befindest Dich in der Entwurfsansicht beim Abfrageentwurf??
Ich empfehle Dir, die Abfrage in der SQL Ansicht zu bearbeiten. Entweder "Abfrage in SQL Ansicht erstellen" oder "rechte Maustaste auf bestehende Abfrage >> In SQL Ansicht bearbeiten"
Dort kannst Du die Abfrage direkt mit SQL -wie im Thread beschrieben- aufbauen

Gruß Barlee
der_Zerstreute
***
Beiträge: 62
Registriert: Do, 01.05.2008 11:33

Re: Mittelwert mit Zähler

Beitrag von der_Zerstreute »

Hi ,
Heißt das, Du befindest Dich in der Entwurfsansicht beim Abfrageentwurf??
ja , bin/war ich.
Ich empfehle Dir, die Abfrage in der SQL Ansicht zu bearbeiten. Entweder "Abfrage in SQL Ansicht erstellen" oder "rechte Maustaste auf bestehende Abfrage >> In SQL Ansicht bearbeiten"
Dort kannst Du die Abfrage direkt mit SQL -wie im Thread beschrieben- aufbauen
Das habe ich jetzt mit meinen spärlichen SQL Kenntnissen versucht umzusetzen. Leider gibt es da ein paar Formatierungsprobleme mit denen ich nicht gerechnet habe.

Ich habe folgenden Code in die SQL Ansicht eingetragen und bekomme einen Fehlercode 1000 wenn ich abspeichern will.
Wenn da jemand mir einen Tip geben könnte wie ich das in eine funktionstüchtige Form bringen kann wäre ich sehr dankbar.

Code: Alles auswählen

SELECT "Gerät"."Gerätetyp" AS "Was", AVG( DATEDIFF( 'mi', "Start", "fertig" ) ) AS "benötigt" FROM "Eingabe",COUNT("Übertragen") WHERE "Eingabe"."Übertragen" = 'TRUE' FROM "Eingabe", "Gerät" WHERE "Eingabe"."Gerät" = "Gerät"."ID" AND "Eingabe"."angefangen" = 1 GROUP BY "Gerät"."Gerätetyp"
Danke für alle Eure Tips bisher ,
hoffentlich kann das noch jemand entknoten :D

Gruß
Daniel
pmoegenb
********
Beiträge: 4330
Registriert: Di, 22.06.2004 12:02
Wohnort: 71134 Aidlingen
Kontaktdaten:

Re: Mittelwert mit Zähler

Beitrag von pmoegenb »

Hallo Daniel,

es ist schon verwirrend. So wie Du die SQL-Klausel formuliert hast, kann dies nicht funktionieren.

1. Zunächst muss die Feldaufzählung, getrennt durch ein Komma, nach der SELECT-Klausel kommen.
2. Nach der FROM-Klausel die Aufzählung der Tabellen, getrennt durch ein Komma.
3. Nach der WHERE-Klausel die Aufzählung der Bedingungen, wobei Äpfel nicht mit Birnen verglichen werden können. D.h., es muss sich um dieselben Feldtypen handeln, sofern keine Umwandlung erfolgt. Bedingungen können mit AND und OR verknüpft werden.

Beispiel:

Code: Alles auswählen

SELECT Feld1, Feld2, Typ, AVG(DATEDIFF(.......)) AS benötigt, COUNT(*)
FROM Tabelle1, Tabelle2
WHERE Tabelle1.Feld1 = Tabelle2.Feld1
AND Tabelle1.Uebertragen = 'TRUE'
AND Tabelle2.Angefangen = 1
GROUP BY Tabelle1.Typ
Der Tabellenname muss dem Feldnamen, getrennt durch einen Punkt (.) nur vorangestellt werden, wenn der Feldname nicht eindeutig hast. D.h., der Feldname in mehreren der angegebenen Tabellen enthalten ist. Deutsche Zeichen wie ü, ä, ö in Tabellen und Feldnamen solltest Du vermeiden. Nicht alle Datenbanken können damit etwas anfangen.

Ausführlichere Informationen findest Du hier:

http://de.wikipedia.org/wiki/SQL
http://hsqldb.org/web/hsqlDocsFrame.html
Gruß

Peter
---------------------------------------------------------------------------
Windows 7 Prof. 64-bit SP1, LibreOffice 4.3.6.2 und AOO 4.1.1
der_Zerstreute
***
Beiträge: 62
Registriert: Do, 01.05.2008 11:33

Re: Mittelwert mit Zähler

Beitrag von der_Zerstreute »

Hallo Leute ,

ich habe mir jetzt mal die Formel entsprechend übernommen allerding sieht es jetzt so aus als ob er Daten ausläßt.

Code: Alles auswählen

    SELECT Feld1, Feld2, Typ, AVG(DATEDIFF(.......)) AS benötigt, COUNT(*)
    FROM Tabelle1, Tabelle2
    WHERE Tabelle1.Feld1 = Tabelle2.Feld1
    AND Tabelle1.Uebertragen = 'TRUE'
    AND Tabelle2.Angefangen = 1
    GROUP BY Tabelle1.Typ
Kurze Information zu den Eingaben :

Es wird jedes Projekt mehrmals gestartet und beendet bevor es den Logischen "True" Wert im uebertragen Feld bekommt.
Wenn ich die Logic dieses Quellcodes jetzt richtig verstehe würde es aber nur die Summieren die auch das uebertragen flag haben.
Das bedeutet das die gezählte Zeit nicht der wirklich benötigten Zeit entspricht.
Das Angefangen-Flag ist jedoch bei jedem mal gesetzt wo an dem Projekt gearbeitet wird.

Alles was ich von der db wissen möchte ist wie lange ein Projekt im Durchschnitt dauert wenn der Zähler für die Anzahl der Projekte die Summe aller uebertragen-flags ist.

irgendwie ist das hier alles noch nich so richtig das was ich suche ;)

danke nochmals vielmals !!!

daniel
Barlee
******
Beiträge: 767
Registriert: Sa, 17.12.2005 12:27

Re: Mittelwert mit Zähler

Beitrag von Barlee »

Hallo zerstreuter,
irgendwie ist das hier alles noch nich so richtig das was ich suche
Das ist schade ;-)

Bring am besten ein Beispiel. Ein paar Zahlenreihen und darunter das Ergebnis in der Art, wie Du es haben möchtest. Das macht es anschaulicher und man kann gezielter helfen.

Gruß Barlee
der_Zerstreute
***
Beiträge: 62
Registriert: Do, 01.05.2008 11:33

Re: Mittelwert mit Zähler

Beitrag von der_Zerstreute »

Hallo Leute ,

ok , das mit dem Beispiel klingt mir jetzt am logischsten ;)

also hab ich jetz mal eine beispieltabelle erstellt -> siehe Anhang.

Ich hoffe es verdeutlicht so ca was ich haben möchte ;)

das Feld angefangen ist in diesem Beispiel immer 1 - dies ist jedoch nicht immer der Fall ! In der Auswertung, die ich haben möchte, sollen aber nur die Projekte berücksichtigt werden die angefangen worden sind.

Gruß und Dank
Daniel
Beispieltabelle
Beispieltabelle
Zwischenablagebild.jpg (102.81 KiB) 938 mal betrachtet
Barlee
******
Beiträge: 767
Registriert: Sa, 17.12.2005 12:27

Re: Mittelwert mit Zähler

Beitrag von Barlee »

Hallo Zerstreuter,

das ist gar nicht so schwer, wenn Du Dir die Aufgabe logisch "zerpflückst".
Du benötigst genau zwei Ergebnistabellen, die Du durch Unterabfragen erhältst. Die erste liefert Dir -gruppiert nach Projekt- die Zeitsummen in Stunden , die zweite die Anzahl fertiger Projekte, ebenfalls nach Projekten gruppiert.
Die letzte benötigte Ergebnisspalte ist eine Berechnung aus Spalten der ersten beiden Unterabfragen.
Die beiden Ergebnistabellen verbindest Du nun mittels LEFT JOIN über das gemeinsame Attribut "Projekte".

Folgendes Beispiel geht von einer Ursprungstabelle "Tab_Projekte" aus, die die in Deinem Beispiel genannten Felder
"Projekt", "Start", "Stop", "Angefangen", "fertig" bereitstellt

Erste Unterabfrage (Ergebnistabelle Tab_A)

Code: Alles auswählen

SELECT 
"Projekt",
SUM(CAST(DATEDIFF('mi',"Start","Stop") AS DOUBLE)/60) AS "Sum_Std"
FROM "Tab_Projekte"
WHERE "Angefangen"=1
GROUP BY "Projekt"
Zweite Unterabfrage (Ergebnistabelle Tab_B)

Code: Alles auswählen

SELECT 
"Projekt",
COUNT("fertig") as "Anz_Fertig"
FROM "Tab_Projekte"
WHERE "fertig" = 1 AND "Angefangen"=1
GROUP BY "Projekt"
Nun der LEFT JOIN und die Berechnung von Zeit/Anz_fertiger_Reparaturen

Code: Alles auswählen

SELECT 
"Tab_A"."Projekt",
"Tab_A"."Sum_Std",
"Tab_B"."Anz_Fertig",
"Tab_A"."Sum_Std"/"Tab_B"."Anz_Fertig" AS "Sum/Anz"

FROM
(
SELECT 
"Projekt",
SUM(CAST(DATEDIFF('mi',"Start","Stop") AS DOUBLE)/60) AS "Sum_Std"
FROM "Tab_Projekte"
WHERE "Angefangen"=1
GROUP BY "Projekt"
) "Tab_A" LEFT JOIN
(
SELECT 
"Projekt",
COUNT("fertig") as "Anz_Fertig"
FROM "Tab_Projekte"
WHERE "fertig" = 1 AND "Angefangen"=1
GROUP BY "Projekt"
) "Tab_B" ON "Tab_A"."Projekt" = "Tab_B"."Projekt"
mit dem Ergebnis, das Deiner Wunschvorstellung recht ähnlich ist:
LFT_JOIN.png
LFT_JOIN.png (5.45 KiB) 919 mal betrachtet
SQL direkt ausführen muss aktiviert sein!

Gruß Barlee
der_Zerstreute
***
Beiträge: 62
Registriert: Do, 01.05.2008 11:33

Re: Mittelwert mit Zähler

Beitrag von der_Zerstreute »

Hey Barlee,

Mega Dankeschön ... genau das habe ich gesucht :D ..

habe deinen Vorschlag mal umgesetzt und läuft :D ..

Vielen Danke für deine Mühe :D .. hab wieder was gelernt ..

Gruß
der_Zerstreute
Antworten