AJRames Geschrieben 27. Mai 2009 Geschrieben 27. Mai 2009 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 Zitieren
T3D Geschrieben 27. Mai 2009 Geschrieben 27. Mai 2009 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 Zitieren
AJRames Geschrieben 27. Mai 2009 Autor Geschrieben 27. Mai 2009 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! Zitieren
T3D Geschrieben 27. Mai 2009 Geschrieben 27. Mai 2009 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 Zitieren
AJRames Geschrieben 27. Mai 2009 Autor Geschrieben 27. Mai 2009 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 Zitieren
T3D Geschrieben 27. Mai 2009 Geschrieben 27. Mai 2009 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 Zitieren
Jeglalf Geschrieben 28. Mai 2009 Geschrieben 28. Mai 2009 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. Zitieren
dbwizard Geschrieben 28. Mai 2009 Geschrieben 28. Mai 2009 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 Zitieren
Jeglalf Geschrieben 28. Mai 2009 Geschrieben 28. Mai 2009 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. Zitieren
Jeglalf Geschrieben 28. Mai 2009 Geschrieben 28. Mai 2009 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. Zitieren
T3D Geschrieben 28. Mai 2009 Geschrieben 28. Mai 2009 er hats auch schon fertig und im endeffekt ueber java geloest Zitieren
Jeglalf Geschrieben 28. Mai 2009 Geschrieben 28. Mai 2009 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. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.