Veröffentlicht 27. Mai 200916 j Hi Leute. Brauch mal dringend eure Hilfe. Ich muss eine Abfrage erstellen und weiss nicht weiter. Folgendes: Ich hab eine Tabelle die Anfragen speichert. Ich muss jetz ausgeben wieviele Anfragen im ersten Quartal eingegangen sind. Soweit sogut, aber das jetz auch noch mit Uhrzeit. Ich hätte es gern so das die Ausgabe der View oder Abfrage die ich erstelle so aussieht: Zeile1: Anfragen um 7.15 --> 30 Zeile2: Anfragen um 7.30 --> 15 Zeile3: Anfragen um 7.45 --> 12 usw bis 18 Uhr. Bin grad knapp davor ne While schleife zu machen und die Uhrzeit dann hochzählen zu lassen: SELECT COUNT(ID) FROM ANFRAGEN WHERE UHRZEIT LIKE ? AND Datum BETWEEN '2009-01-01' AND '2009-04-30'; Statt ? dann immer die Uhrzeit die ich in der While neu erstelle. Aber das wären pro Quartal 44 abfragen....nicht das Gelbe vom Ei.... Könnt ihr mir evtl. helfen? Danke schonmal, Gruß AJ
27. Mai 200916 j dbms ? wuerd in mysql in etwa so rangehn: SELECT date_format(Datum, '%h:%i' )as uhrzeit, COUNT(ID) FROM ANFRAGEN WHERE Datum BETWEEN '2009-01-01' AND '2009-04-30' GROUP BY uhrzeit Ted
27. Mai 200916 j Danke für die schnelle Antwort! Aber ich versteh leider nicht wofür diese Zeile da ist: date_format(Datum, '%h:%i' )as uhrzeit, Ich glaub ich müsste sie verstehen, da ich mit HSQL arbeite und die entsprechend umändern muss! Danke!
27. Mai 200916 j MySQL :: MySQL 5.0 Reference Manual :: 11.6 Date and Time Functions da wirds dir erklaert. macht nichts anderes als ein datum in ein dir vorgegebenes format zu wandeln
27. Mai 200916 j Danke nochmal Echt ne schwere Geburt, aber habs jetz fast, nur noch eine Frage. Bei mir siehts grad so aus das er nur die Uhrzeiten und Anfragen ausgibt wo bereits eine Anfrage war. Sprich so: 16.30 --> 9 16:45 --> 1 17:00 --> 1 Ich brauch jedoch auch die Info das z.b. um 7:00 Uhr keine Anfrage kam... Also ne ganze liste von 7 -18 Uhr....wie mach ich das am besten? z.B. 7:00 --> 0 7:15 --> 1 usw
27. Mai 200916 j hm.. du koenntest dir ne hilfstabelle mit allen uhrzeiten die du brauchst anlegen, aber nen genauen tipp hab ich dafuer nicht - da ich sowas normalerweise ueber PhP loese
28. Mai 200916 j Ja, in purem SQL geht das so nicht um zu setzen, da er ja nur existierende Datensätze verarbeiten kann. Dazu müsstest Du über eine Referenztabelle oder Schleife gehen oder alternativ z.B. jede 15 Minuten prüfen, ob Anfragen vorliegen und dann einen Dummydatensatz reinschreiben, sofern keine da sind. Um den Dummy verarbeiten zu können, müsste Dein select dann aber wieder anders aussehen.
28. Mai 200916 j Ja, in purem SQL geht das so nicht um zu setzen, da er ja nur existierende Datensätze verarbeiten kann. Dazu müsstest Du über eine Referenztabelle oder Schleife gehen oder alternativ z.B. jede 15 Minuten prüfen, ob Anfragen vorliegen und dann einen Dummydatensatz reinschreiben, sofern keine da sind. Um den Dummy verarbeiten zu können, müsste Dein select dann aber wieder anders aussehen. Unterstützt MySQL nicht den WITH - Konstrukt ? Dass wäre dann die Lösung für die "fehlenden" Zeiten
28. Mai 200916 j Hab mich nochmal schlau gemacht. Es scheint kein WITH bei MySQL zu geben, habe auch kein Pendant gefunden. Allerdings gelernt, dass WITH als Zusatzfeature im SQL-Standard steht, aber bisher von den DB-System-Entwicklern sträflich vernachlässigt wird. Da gibts sogar ein With-Recursive.
28. Mai 200916 j Hab grad noch gesehen, dass es ja garnicht um MySQL, sondern HSQL geht^^ Hier könnte der CREATE SEQUENCE eventuell weiter helfen, ansonsten kämen eventuell noch über java oder innerhalb der selects berechnete Konvertierungen in Frage, z.B. Ansätze über: - Datum in entsprechende Zahl (INT) konvertieren und hochzählen - Uhrzeiten in Anzahl Minuten seit 0 Uhr umrechnen und durch Division in geeignete Segmente unterteilen, die dann in einer normalen (for-)Schleife (oder eben durch join mit der sequence oder einer 1-maligen Referenztabelle) abgearbeitet werden können. Sollte generell einige Möglichkeiten geben, das auf einem einigermaßen praktikablen Weg zu umgehen.
28. Mai 200916 j macht ja nix, öffentliche foren sind ja nicht nur dazu da, dem Threadersteller zu helfen, habe selbst auch wieder neues dazugelernt und vielleicht helfen einige Ansätze noch anderen weiter.
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.