PDA

Vollständige Version anzeigen : maximalen wert zeigen


skorpions77
06.07.2001, 08:03
Hi! ich bin total ratlos! Muß sagen ich kenne mich nicht wirklich gut aus also bitte um verständnis für eine wahrscheinlich so leichte Frage!
Also ich habe 2 Tabellen eine heißt beginn un die andere Ende und in beiden stehen datum und Uhrzeit drin.
Das sind Anrufer.
Jetzt brauche ich als ergebnis wieviele Anrufer immer gleichzeitig dran waren!
Bitte mailt mir.
Skorpions77@hotmail.com
thx

------------------
Auch von jedem noch so dummen Spruch kann man was lernen wenn man zuhören kann

gloria
06.07.2001, 09:45
hi,
was meinst du mit: "wieviele Anrufer immer gleichzeitig dran waren" ???

Du kannst mit Dcount(), MIN(), Max() einiges aus einer Abfrage/Tabelle rausfieseln, schau dir mal diese Funktionen an. Event. kannst du deine 2 Tabellen auch in einer Abfrage zusammmenfassen und mit Gruppierungen und Summierungen einiges erledigen.
Für genaueres bräuchte ich aber bessere Angaben von dir.

ciao glori

skorpions77
06.07.2001, 12:24
Ja genau das mit der Abfrage habe ich gemeint!
Also wie gesagt ich habe 2 tabellen 1. beginn und die 2. ende dort werden in der 1. die beginnzeiten gespeichert undin der 2 die endzeiten gespeichert d.h. von wann bis wann ein anrufer dran war nun rufen auch viele Leute gleichzeitig an. Und ich möchte in einer Abfrage wissen wieviele Leute gleichzeitig angerufen haben!
thx

------------------
Auch von jedem noch so dummen Spruch kann man was lernen wenn man zuhören kann

O-Schreiner
06.07.2001, 13:59
Vielleicht hab ich die Problemstellung ja nicht ganz begriffen ... aber ich suche noch nach dem Weg welcher Beginn zu welchem Ende gehört .... gibts da eine ID oder sowas?

cu, Olly

skorpions77
06.07.2001, 14:18
Also ich habe wie gesagt 2 Tabellen die erste heißt beginn und die zweite heißt ende.
Nun wenn ein Anrfu reinkommt schreibt es mir in die Tabelle beginn das Datum und die startzeit des anrufers und wenn der Anrufer auflegt kommt in die Tabelle ende das datumn und die endzeit des anrufers.
So und da nun sehr viele Anrufer gespeichert werden möchte ich wissen wie viele maximal zur gleichen Zeit angerufen haben!
Dazu muß ich die Tabellen vergleichen und eine maximale Zahl herausbekommen nur weiß ich leider überhaupt nicht wie das geht!
thx

------------------
Auch von jedem noch so dummen Spruch kann man was lernen wenn man zuhören kann

MarioR
06.07.2001, 16:31
Hallo,

ich sehe hier die gleichen Probleme wie Olly.

Du brauchst zwischen beiden Tabellen ein Verbindungsfeld z.B. eine ID oder die Rufnummer des Anrufers. Wenn Du nur jeweils Datum und Zeit speicherst, weisst Du bei der Auswertung ja nicht mehr, welcher Gesprächsbeginn zu welchem Gesprächsende gehört.

Vielleicht kannst Du das noch mal genauer erklären, dann können wir Dir auch weiterhelfen :)

skorpions77
06.07.2001, 20:42
ja ich habe noch mehr Tabellen wie namme und Nummer und die Leitung auf der er gesprochen hat usw.
Warum brauch ich die auch?
Sorry kenn mich leider wirklich nicht gut aus!
zB Name beginn ende
hugo 13.25 14.00
franz 13.27 13.50
ernst 11.00 11.30
Das mein ich jetzt gesamt 3 anrufer das interessiert mich nicht aber zwei zur gleichen zeit also heute waren maximal 2 leute zur gleichen zeit hier also haben angerufen!
Hoffe Ihr kennt jetzt meine wirren Gedankengänge!
thx das Ihr Euch überhaupt die mühe amcht und nachfragt!

------------------
Auch von jedem noch so dummen Spruch kann man was lernen wenn man zuhören kann

MarioR
07.07.2001, 10:29
Hallo,

ich versteh jetzt Dein Problem, glaub ich.
Du hast eine Tabelle mit mehreren Feldern, seh ich das richtig?

Mit der Formel
DCount("*","DeineTab","#" & Format(DeineVorgabe,"mm-dd-yy") & "# Between [Beginn] And [Ende]")
läßt sich da was machen.
Du müsstest nochmal genau erklären, wie Du Datum und Uhrzeit vorgeben willst und wo das Ergebnis stehen soll.

skorpions77
08.07.2001, 10:32
hi nein ich glaube ich meine doch noch etwas anderes.
Ich meinte ich habe mehrere Tabellen mit Name und Leitung und was weiß ich alles nur in der beginn und ende tabelle steht das datum und daneben die Uhrzeit und ich suche nun die amximale nazahl derer Anrufer die zur gleichen zeit angerufen haben! zb wenn zur jeden vollen Stunde am Tag ein Anrufer für 5 Minuten telöefoniert nur um sagen wir 1300 uhr dre Leute anrufen dann möchte ich als ergebnis haben 3. Da dann die maximale gleichzeitige Anruferzahl 3 ist.
thx

------------------
Auch von jedem noch so dummen Spruch kann man was lernen wenn man zuhören kann

MarioR
08.07.2001, 10:54
...wart mal,
irgendwie reden wir aneinander vorbei.

Beispiel:
Ich will jetzt wissen, ob ein Gespräch um 13:00 Uhr statt gefunden hat. Ich schau jetzt in Deine Beginn-Tab. Da find ich ein Gespräch, das um 12:55 begann. Jetzt schau ich in die Ende-Tab. Wie finde ich jetzt den DS mit Uhrzeit/Datum, der zu diesem Gespräch gehört? Diese Verbindung ist mir irgendwie noch unklar! :confused:

Vielleicht kannst Du mir auch die DB mal schicken. Dann kann ich mir ein besseres Bild machen.

WalterS
08.07.2001, 15:08
Hallo Skorpions77!

Ich bin davon ausgegangen, dass su eine Abfrage erstellen kannst, in der der Beginn und das Ende angeführt sind. Bei meiner annahme hat diese den Namen Anrufe.
Erstelle nun eine Abfrage mit fogendem SQL

SELECT Anrufe.Beginn, Anrufe.Ende, DCount("Beginn","AnrufAnalyse","(" & Hour([beginn])*60+Minute([beginn]) & " between (Hour([beginn])*60+Minute([beginn])) and (hour(Ende)*60 + minute(Ende))) or (" & Hour([ende])*60+Minute([ende]) & " between (Hour([beginn])*60+Minute([beginn])) and (hour(Ende)*60 + minute(Ende)))") AS AnrufeAnzahl
FROM Anrufe;

In dieser Abfrage werden in der 3. Spalte (AnrufeAnzahl) die für den jeweiligen Zeitraum vorhandenen Gespräche angezeigt

Wenn du wirklich nur den Spitzenwert benötigst dann musst du noch TOP 1 nach Select einfügen

SELECT TOP 1 Anrufe.Beginn, Anrufe.Ende .....

skorpions77
09.07.2001, 08:14
Hi Walter!
Soweit hat es geklappt mit der Eingabe von Dir nur bekomme ich als Ausgabe immer nur #FEHLER.

Liegt das daran, das ein DS so aussieht: 30.05.2001 00:03:26 ????
Also Datum und dann die Uhrzeit?
Und jetzt steht noch als Fehlermeldung:
"Das Microsoft JET Datenbankmodul findet die Eingangstabelle oder Abfrage AnrufAnalyse nicht. ...
Was habe ich da falsch gemacht?

Sorry der dummen Fragen nur in der Hinsicht habe ich wirklich keine Ahnung.

Und wollte mich hier auch gleich einmal bei allen hier bedanken die sich die mühe machen!
thx

------------------
Auch von jedem noch so dummen Spruch kann man was lernen wenn man zuhören kann

WalterS
11.07.2001, 10:20
Wenn deine Felder die Form Datum Uhrzeit haben dann lautet der SQL String für die Auswertung der Abfrage AnrufeDat

SELECT Beginn, Ende, DCount("*","AnrufeDat","('" & Format([beginn],"yyyymmdd hhnnss") & "' between Format([beginn]," & Chr(34) & "yyyymmdd hhnnss" & Chr(34) & ") and Format([Ende]," & Chr(34) & "yyyymmdd hhnnss" & Chr(34) & ")) or " & "('" & Format([Ende],"yyyymmdd hhnnss") & "' between Format([beginn]," & Chr(34) & "yyyymmdd hhnnss" & Chr(34) & ") and Format([Ende]," & Chr(34) & "yyyymmdd hhnnss" & Chr(34) & "))") AS AnrufeAnzahl
FROM AnrufeDat;

Achtung. Am Besten den SQL string in eine neue Abfrage hineinkopieren und dann AnrufeDat (zweimal im String vorhanden) auf die eigene Abfrage ändern.

PS: Beim letzten Mal ( nur Uhrzeit) war ein kleiner Fehler im Dcount sollte statt AnrufAnalyse lediglich Anrufe stehen, sorry.

skorpions77
11.07.2001, 11:17
hi habe die ganzen AnrufeDat auf Anrufe geändert und vor Anfang und Ende auch Anruf geschrieben?
Nur jetzt hängt sich der Rechner fast auf der hat sehr viel zu tun! Aber ich denke der Anfang stimmt nur gibt es ja jetzt auch einen Befehl, der mir nur die maximal Zahl pro tag anzeigt? Ich meine wenn am 11.07.01 so um 13 5 Leute angerufen haben (gleichzeitig eben) und das an dem tag die meisten zur gleichen Zeit sind kann man nur die anzeigen lassen?

thx a lot!
------------------
Auch von jedem noch so dummen Spruch kann man was lernen wenn man zuhören kann

WalterS
11.07.2001, 15:59
Hallo!
Du willst ja auch, dass der PC viel rechnet,also musst du ihm auch Zeit dafür geben. Am besten schränkst du die Daten für die "Anrufe"- Abfrage über ein Datumskriterium auf einen Tag ein. Dann sind es bedeutend?? weniger Daten zum Rechnen und geht auch schneller. Wenn du nur den Spitzenwert sehen willst dann nimm statt SELECT eben SELECT TOP 1 und das Ergebnis ist nur der Spitzenwert. Wenn du dir dann die Datensätze anzeigen lässt bei denen Beginn oder Ende zwischen diesen beiden Werten liegt sollte es funken.

skorpions77
12.07.2001, 08:43
hi!
Soweit scheint er zu rechnen das paßt ja nur habe ich einen Teil überprüft und das kann leider nicht stimmen!
Er gibt mir aus das zB gleich am Anfang

Obwohl da nur einer angerufen hat um die Zeit. Und wie hast Du das gemeint mit der Datumsabfrage?
Kann ich eine Abfrage machen wo er mir nur einen Tag ausgibt?
So nun das ist die Tabelle (ein Teil halt)
beginn ende
30.05.2001 00:03:26 30.05.2001 00:03:46
30.05.2001 00:04:24 30.05.2001 00:05:12
30.05.2001 00:02:11 30.05.2001 00:05:29
30.05.2001 00:00:37 30.05.2001 00:07:13
30.05.2001 00:02:15 30.05.2001 00:07:41
30.05.2001 00:11:36 30.05.2001 00:11:38
Und das ist das ergebnis:
Beginn Ende AnruferAnzahl
30.05.2001 00:03:26 30.05.2001 00:03:46 4
30.05.2001 00:04:24 30.05.2001 00:05:12 4
30.05.2001 00:02:11 30.05.2001 00:05:29 3
30.05.2001 00:00:37 30.05.2001 00:07:13 2
30.05.2001 00:02:15 30.05.2001 00:07:41 3

Wie man sieht kann das nciht ganz stimmen das diese Anrufer eigentlich alleine waren zu der Zeit und er rechnet mir aber 3 oder 4 aus! Und das sollen die TOP 5 von 10 tagen sein.

PS bin Dir sehr dankbar das Du Dich mit einer Nerve wie mir so lange aushaltest!

------------------
Auch von jedem noch so dummen Spruch kann man was lernen wenn man zuhören kann

MarioR
12.07.2001, 19:10
Hallo,

ich hab nochmal über Dein Problem nachgedacht.

Ich bin jetzt zu folgendem Ergebnis gekommen:
Es ist im Prinzip nicht notwendig zu wissen, wann ein Gespräch begonnen hat und wann es beendet wurde. Es ist vielmehr möglich einen Zähler für die aktuelle Anzahl der Gespräche zu erstellen. Dann lässt man die Zeit ablaufen. Taucht im Feld Beginn die aktuelle Zeit auf, wird der Zähler um 1 erhöht. Taucht sie im Feld Ende auf, wird der Zähler um 1 verringert. Das ist die Basis für die folgende Lösung mit 3 Abfragen.

1.Abfrage (Anrufe_1):
(SELECT Beginn AS Zeit, 1 AS Wert FROM Anrufe) UNION ALL (SELECT Ende AS Zeit, -1 As Wert FROM Anrufe)
ORDER BY Zeit;

Die schreibt die beiden Felder Beginn und Ende hintereinander in eine Spalte und sortiert sie dabei nach der Zeit. Gleichzeitig wird in einer neuen Spalte eine +1 (Beginn) oder eine -1 (Ende) hinterlegt.

2.Abfrage (Anrufe_2):
SELECT Anrufe_1.Zeit, Sum(Anrufe_1.Wert) AS SWert
FROM Anrufe_1
GROUP BY Anrufe_1.Zeit;

Hier werden DS mit der gleichen Zeit zu einem DS verdichtet.

3.Abfrage (Anrufe_3):
SELECT Anrufe_2.Zeit AS Start, DFirst("Zeit","Anrufe_2","Zeit>#" & Format([Zeit],"mm" & "-dd" & "-yy " & "hh:nn:ss") & "#") AS Ende, DSum("SWert","Anrufe_2","Zeit<=#" & Format([Zeit],"mm" & "-dd" & "-yy " & "hh:nn:ss") & "#") AS AnzahlAnrufe
FROM Anrufe_2
ORDER BY DSum("SWert","Anrufe_2","Zeit<=#" & Format([Zeit],"mm" & "-dd" & "-yy " & "hh:nn:ss") & "#") DESC;

Diese Abfrage liefert Dir jetzt die jeweiligen Zeiträume und die Anzahl der Anrufer in diesem Zeitraum. Die Abfrage läuft eine Weile (ich habs mit rund 2000 DS in der Tab Anrufe getestet -> Laufzeit rund 3 min)

Vielleicht fällt mir für die 3. Abfrage noch eine schnellere Lösung ein.
Hoffentlich hab ich mich nirgendwo verhauen.

WalterS
12.07.2001, 20:23
Hallo!

Ich habe das Problem meiner Abfrage schon erkannt. Es erkennt nur übereinander greifende Zeiträume, nicht aber Zeiträume die gänzlich innerhalb des überprüften Zeitraum liegen. Ich sehe als derzeit einzige Möglichkeit in der Tabelle ein nummerisches Feld anzulegen. und diese durch Abfragen für alle Möglichkeiten "hochzuzählen".

Den Ausführungen von Mario kann ich geistig leider nicht folgen. Vielleicht funkt es so ???

MarioR
12.07.2001, 20:47
Hallo,

@Walter
Eine Sache sich auszudenken ist das Eine, sie jemandem zu erklären was ganz Anderes. Ich hab meinen geistigen Ergüsse nochmal durchgelesen - naja ... ;)

@skorpions77
Ich hab die Abfrage mal für Dein Beispiel durchlaufen lassen. Das Ergebnis sieht so aus (jetzt allerdings nach Uhrzeit sortiert):

Start Ende AnzahlAnrufe
30.05.01 00:00:37 30.05.01 00:02:11 1
30.05.01 00:02:11 30.05.01 00:02:15 2
30.05.01 00:02:15 30.05.01 00:03:26 3
30.05.01 00:03:26 30.05.01 00:03:46 4
30.05.01 00:03:46 30.05.01 00:04:24 3
30.05.01 00:04:24 30.05.01 00:05:12 4
30.05.01 00:05:12 30.05.01 00:05:29 3
30.05.01 00:05:29 30.05.01 00:07:13 2
30.05.01 00:07:13 30.05.01 00:07:41 1
30.05.01 00:07:41 30.05.01 00:11:36 0
30.05.01 00:11:36 30.05.01 00:11:38 1

Die meisten Anrufe fanden also zwischen 0:3:26 und 0:3:46 bzw. zwischen 0:4:24 und 0:5:12 statt. In der Hinsicht stimmt auch Walters Lösung.

skorpions77
13.07.2001, 11:43
Also zuerst muß ich Euch beiden einmal ordentlich Danken!
ich finde es total super, daß Ihr Euch so um jeden hier kümmert auch wenn es noch so schwierig ist mit den Leuten!
Super Danke und wenn Ihr mal nach Wien kommt gehn wir mal ein Bier trinken!

So nun MArio leider bin ich noch immer zu dumm es zum laufen zu bringen!
Und zwar schon bei der ersten Abfrage kommt ein Fehler.
ich habe alle drei Abfragen gemacht und Deine Angaben reinkopiert und folgender Fehler tritt auf:
ODBC-Aufruf fehlgeschlagen

[TCX][MYODBC]You have an error in your SQLsyntax near `(SELECT beginn,1 FROM statistik) UNION ALL (SELECT ende,-1 FROM statistik)at line 1(#1064)

ich kann damit leider nichts anfangen und weiß daher nichteinmal wo ich einen Fehler suchen muß!

thx to all a lot!

------------------
Auch von jedem noch so dummen Spruch kann man was lernen wenn man zuhören kann

MarioR
13.07.2001, 12:00
Hallo,

also mit ODBC kenn ich mich nicht aus.

Ich denke aber, dass der Fehler hier liegt:
Ich habe in meinen SQL-Befehlen den Teil ... AS Zeit ... drinstehen. Damit werden die neuen Feldbezeichnungen festgelegt (hier also z.B. ZEIT). Und das fehlt bei Dir.
Ich denke es muss so aussehen:
(SELECT beginn AS Zeit, 1 AS Wert FROM statistik) UNION ALL (SELECT ende AS Zeit, -1 AS Wert FROM statistik)

skorpions77
16.07.2001, 07:59
Kenn mich mit ODBC auch nicht sonderlich aus!

Und das heißt nun?
Kann ich da was ändern?

thx

------------------
Auch von jedem noch so dummen Spruch kann man was lernen wenn man zuhören kann

MarioR
16.07.2001, 08:54
Hast Du meine vorgeschlagenen Änderungen im SQL-String mal probiert?

skorpions77
16.07.2001, 08:58
ich wollte nur weiß ich leider nicht was Du damit meinst!
Soll ich statt Zei eben bei Dir etwas anderes bei mir einsetzen?
Oder muß ich Zeit irgendwo definieren?
ich weiß leider nicht was Du meinst!
Sorry

------------------
Auch von jedem noch so dummen Spruch kann man was lernen wenn man zuhören kann

MarioR
16.07.2001, 11:25
Nein, ich meinte, dass Du den jetzigen SQL-String (für die 1. Abfrage) mal durch meinen vorgeschlagenen ersetzt:

also
(SELECT beginn, 1 FROM statistik) UNION ALL (SELECT ende, -1 FROM statistik)

durch
(SELECT beginn AS Zeit, 1 AS Wert FROM statistik) UNION ALL (SELECT ende AS Zeit, -1 AS Wert FROM statistik)

ersetzen

skorpions77
16.07.2001, 11:32
Hi!
Das habe ich gemacht nur es funktioniert immer noch nicht!
Selber fehler!
Und was mir noch aufgefallen ist aber ich damals vergessen habe aufzuschreiben bei meiner Abfrage_1 habe ich nicht das Abfrage zeichen daneben sondern 2 Ringe.
Ist das egal?
ich kenne das zeichen nicht wirklich!
Danke

------------------
Auch von jedem noch so dummen Spruch kann man was lernen wenn man zuhören kann

MarioR
16.07.2001, 11:46
Die doppelten Ringe sind das Symbol für eine Union-Abfrage, also das ist i.O.

Da mir im Moment auf die Ferne auch Nichts mehr einfällt, würde ich nochmal anbieten, dass Du mir die DB (oder die wichtigsten Teile) zuschickst. Ich hab allerdings nur Acc97 zur Verfügung.

skorpions77
16.07.2001, 11:56
Hi! Würde ich ja gerne aber die DB ist viel zu groß und der Datenschutz!
Ich weiß das Du ncihts machst nur es hätte sonst auch keiner gerne!

Was würdest Du denn genau brauchen?
Oder besser was mußt Du genau wissen?
Ich kann Dir alles ganz genau beschreiben wenn Du mir sagst was Du genau wissen mußt!
Die DB ist rießen groß 260MB.


------------------
Auch von jedem noch so dummen Spruch kann man was lernen wenn man zuhören kann

MarioR
16.07.2001, 12:15
Also im Prinzip brauch ich die Struktur der Tab (Statistik ???), möglichst mit einigen Beispieldaten und die 3 Abfragen, wie Du sie jetzt angepasst hast.

Da fällt mir grad was ein. Wieso hast Du eigentlich mit ODBC zu tun. Kommt die Tab Statistik nicht aus der DB, wo die Abfragen sind?

skorpions77
16.07.2001, 13:31
nun gut also ich habe eine Tabelle "statistik" da gibt es die einzelnen Tabellen:
id/beginn/ende/linie/ und noch ein paar andere die aber komplett unwichtig sind!
Dann habe ich eine abfrage gemacht die ich anrufe nannte und wo ich nur beginn und ende aufgelistet habe!
Danach habe ich dann Eure vorschläge probiert und nun habe ich dann noch 3 Abfragen gemacht die Du mir gesagt hast: Anrufe_1:
(SELECT beginn AS Zeit, 1 AS Wert FROM statistik) UNION ALL (SELECT ende AS Zeit, -1 AS Wert FROM statistik);
Anrufe_2:
SELECT Anrufe_1.Zeit, Sum(Anrufe_1.Wert) AS SWert
FROM Anrufe_1
GROUP BY Anrufe_1.Zeit;
Anrufe_3:
SELECT Anrufe_2.Zeit AS Start, DFirst("Zeit","Anrufe_2","Zeit>#" & Format([Zeit],"mm" & "-dd" & "-yy " & "hh:nn:ss") & "#") AS Ende, DSum("SWert","Anrufe_2","Zeit<=#" & Format([Zeit],"mm" & "-dd" & "-yy " & "hh:nn:ss") & "#") AS AnzahlAnrufe
FROM Anrufe_2
ORDER BY DSum("SWert","Anrufe_2","Zeit<=#" & Format([Zeit],"mm" & "-dd" & "-yy " & "hh:nn:ss") & "#") DESC;

Brauchst Du noch was?

------------------
Auch von jedem noch so dummen Spruch kann man was lernen wenn man zuhören kann

MarioR
16.07.2001, 13:55
Jo, dann bezieh Dich in "Anrufe_1" bitte auf Deine Abfrage "Anrufe".

Also:
(SELECT Beginn AS Zeit, 1 AS Wert FROM Anrufe) UNION ALL (SELECT Ende AS Zeit, -1 As Wert FROM Anrufe)
ORDER BY Zeit;

Bitte probier das mal genauso aus.

skorpions77
16.07.2001, 14:07
hi hab ich ausprobiert nur es kommt immer wieder dieselbe Fehlermeldung wie letztes mal!


------------------
Auch von jedem noch so dummen Spruch kann man was lernen wenn man zuhören kann

MarioR
16.07.2001, 14:29
Ruf mal bitte die Abfrage "Anrufe" auf, ob die funktioniert.

skorpions77
16.07.2001, 14:31
Die funktioniert da zeigt er mir dann beginn tabelle und ende tabelle an!


------------------
Auch von jedem noch so dummen Spruch kann man was lernen wenn man zuhören kann