Statistiken erstellen



  • Also, ich habe jetzt noch ein wenig rumprobiert und folgendes hinbekommen. Das DBChart zeigt jetzt EIN Datum an und die Anzahl aller Eintäge. Nur ich möchte ja das das DBChart alle Datume (sagt man das so?) und die jeweiligen Eintrage zu diesem Datum anzeigt. Anders gesagt: Ich habe in meiner Datenbank 5 Eintrage mit dem Hersteller "Sony" am 16.02.2006 und 1 Eintrag am 17.02.2006. In dem DBChart zeigt er aber 6 Einträge am 16.02.2006 an. Das heißt er addiert alle Einträge und zeigt nur ein Datum an. Wo liegt mein Fehler. Ist der Quelltext für die Query qirklich richtig???



  • Da wir nicht wissen, was genau in Deiner Query steht...



  • Dein Select ist falsch! Die gruppierst garantiert nicht nach dem Datum.



  • naja so weit ich mich noch erinnere, heisst BETWEEN soviel wie "von abc (inklusive) bis xyz (exklusive)", d.h. xyz wäre in der menge nicht mehr dabei, wenn das die begrenzung deiner suchabfrage wäre. kann auch sein, dass das von datenbank zu datenbank unterschiedlich ist.

    kannst auch folgendes versuchen:

    ...
    WHERE Datum >= :DatumVon AND Datum <= :DatumBis
    ...
    
    // Datumswerte direkt übergeben (ohne Umformatierung)
    // -> Datumswerte werden vom User über 2 TDateTimePicker selektiert
    Query->ParamByName("DatumVon")->AsDateTime = DateTimePicker1->DateTime;
    Query->ParamByName("DatumBis")->AsDateTime = DateTimePicker2->DateTime;
    


  • An Joe_M: Steht doch oben was in meiner Query steht.

    An caspar_louis: Und wie schreibe ich die Selectanweisung richtig?



  • Between ist inclusive, zumindest bei SQL-Server, wahrscheinlich aber überall.



  • PeterGabel schrieb:

    Natürlich habe ich auch den Quelltext auf meine Bedürfnisse abgeänder und nicht 1zu1 übernommen.

    Woher soll ich wissen, dass Du das nicht auch auf den SQL-SELECT beziehst?

    Zum letzten Mal: Was genau steht in der Query als SELECT-Anweisung? Nicht ungefähr, sondern exakt!

    Sunday schrieb:

    naja so weit ich mich noch erinnere, heisst BETWEEN soviel wie "von abc (inklusive) bis xyz (exklusive)", d.h. xyz wäre in der menge nicht mehr dabei, wenn das die begrenzung deiner suchabfrage wäre.

    BETWEEN ist inklusive der beiden Parameter.



  • okay. ich merk schon, dass ich nicht mehr ganz fit bin im SQL bereich. 🙄



  • Sunday schrieb:

    okay. ich merk schon, dass ich nicht mehr ganz fit bin im SQL bereich. 🙄

    Kommt wieder, wenn Du damit arbeiten mußt. Versprochen... 😉



  • PeterGabel schrieb:

    An Joe_M: Steht doch oben was in meiner Query steht.

    An caspar_louis: Und wie schreibe ich die Selectanweisung richtig?

    SELECT COUNT(Hersteller) as Anzahl, Datum
    FROM Tabelle
    WHERE Hersteller = 'Sony'
    AND Datum BETWEEN '01.01.2005' AND '31.12.2005'
    GROUP BY DATUM // nicht nach Anzahl
    ORDER BY Datum ASC

    Oder

    SELECT COUNT(Hersteller) as Anzahl, Datum
    FROM Tabelle
    WHERE Hersteller = 'Sony'
    AND Datum >= '01.01.2005'
    AND Datum <= '31.12.2005'
    GROUP BY DATUM
    ORDER BY Datum ASC

    Dabei solltest Du aber beachten, daß dass wirklich nur ein Bsp-SQL-String ist. Du solltest die variablen Werte (Hersteller,DatumVon,DatumBis) auch wirklich variabel halten und ggf. in die Parameter des Querys reinpacken. Dann mußt Du nicht bei jeder Wertänderung, den Query-SQL-String neu aufbauen.

    P.S.: Je öfter ich es lese, desto mehr Rechtschreibfehler finde ich.



  • Wie gesagt, steht da oben aber hier bitte noch einmal:

    SELECT COUNT(Hersteller) as Anzahl, Datum 
    FROM Tabelle 
    WHERE Hersteller = 'Sony' 
    AND Datum BETWEEN '01.01.2005' AND '31.12.2005' 
    GROUP BY Datum
    ORDER BY Datum ASC
    


  • Dann sollte das funktionieren... Auf welche DB läßt Du das los?

    Kannst auch mal versuchen ein paar Klammerungen vorzunehmen (obwohl das eigentlich nicht das Problem sein sollte...)

    PeterGabel schrieb:

    Wie gesagt, steht da oben aber hier bitte noch einmal:

    SELECT 
    COUNT(Hersteller) as Anzahl,
    Datum 
    FROM Tabelle 
    WHERE (Hersteller = 'Sony') 
    AND (Datum BETWEEN '01.01.2005' AND '31.12.2005') 
    GROUP BY Datum
    ORDER BY Datum ASC
    


  • Nein, hab das mit den Klammern versucht, geht aber auch nicht. Wie gesagt, eswird nur ein Datum angezeigt und die gesamte Anzahl aller Einträge. Könnte es vielleicht auch an den Einstellungen von meinem DBChart liegen???



  • Keine Ahnung, hab ich noch nie verwendet...



  • Laß Dir die Ergebnisse probehalber in einem DBGrid anzeigen oder mal den RecordCount ausgeben.

    Wenn RecordCount = 1 ist, weißt Du schon mal, daß es nicht DBChart ist.
    > 1 -> DBChart prüfen



  • Also ich hab den Kram mal kurz an einem DB-Chart ausprobiert.
    Geht ohne Probleme.

    Das SQL-Kommando dabei war

    select count(*) as Menge,DatumVon
    from ZEITINTERVALLE
    where datumvon >= convert(datetime,'01.02.2006')
    and datumbis < convert(datetime,'01.03.2006')
    and MITARBEITER = 'Sag ich euch nicht'
    group by DATUMVON
    order by DATUMVON

    Horizontale Achse waren die Datumswerte. Vertikale Achse die Menge am jeweiligem Datum. Alles korrekt angezeigt. Machbar ist es also schnell und einfach.



  • Joe_M. schrieb:

    Dann sollte das funktionieren... Auf welche DB läßt Du das los?

    Kannst auch mal versuchen ein paar Klammerungen vorzunehmen (obwohl das eigentlich nicht das Problem sein sollte...)

    PeterGabel schrieb:

    Wie gesagt, steht da oben aber hier bitte noch einmal:

    SELECT 
    COUNT(Hersteller) as Anzahl,
    Datum 
    FROM Tabelle 
    WHERE (Hersteller = 'Sony') 
    AND (Datum BETWEEN '01.01.2005' AND '31.12.2005') 
    GROUP BY Datum
    ORDER BY Datum ASC
    

    Hierbei kann nur EIN Punkt entstehen, da du wahrscheinlich nur EINEN Hersteller namens Sony hast...
    also lass einfach (Hersteller = 'Sony') weg



  • Linnea schrieb:

    Hierbei kann nur EIN Punkt entstehen, da du wahrscheinlich nur EINEN Hersteller namens Sony hast...
    also lass einfach (Hersteller = 'Sony') weg

    ?!? Diesem Gedankengang kann ich im SQL nicht folgen. Es geht nicht darum, wieviele Hersteller vorhanden sind, sondern wieviele unterschiedliche Daten das sind (16.02.2006,17.02.2006).

    ... Hier stand ein fehlerhafter Text.



  • Also es läuft nun. Ich kann euch aber beim besten Willen nicht sagen woren es nun gelegen hat. Ich habe einfach noch mal ein neues Projekt gemacht und alles neu eingegeben. Ich gehe davon aus das ich bei meinem alten Projekt noch etwas stehen gehabt habe was dort nicht reingehört. Jedenfalls läufts jetzt. Ich danke euch alle für die Hilfe.



  • Erst noch mal danke für die Hilfe bei diesem Thema aber mein Problem würde doch noch nicht ganz gelöst was DBChart angeht. Ich kann zwar jetzt die Statistik erstellen mit den Vorgegebenen Werten aber was ist wenn ich an stelle von Datum einen anderen Wert aus meiner Datenbank nehmen will?
    z.B mein Code lautet nun so:

    SELECT COUNT(Hersteller) as Anzahl,
    Datum // Hier möchte ich eine andere Spalte aus meiner Datenbank
    FROM Tabelle 
    WHERE (Hersteller = 'Sony') 
    AND (Datum BETWEEN '01.01.2005' AND '31.12.2005') 
    GROUP BY Datum
    ORDER BY Datum ASC
    

    Hier wird nun die Statistik anhand des Datums erstellt, wenn ich aber kein Datum sondern einen anderen Wert aus der Tabelle haben möchte habe ich es einfach umgeschrieben und so probiert:

    Query1->SQL->Add("SELECT COUNT(Hersteller) as Anzahl,");
    Query1->SQL->Add("Zeit"); 
    Query1->SQL->Add("FROM Tabelle"); 
    Query1->SQL->Add("WHERE (Hersteller = 'Sony')"); 
    Query1->SQL->Add("AND (Datum BETWEEN '01.01.2005' AND '31.12.2005')"); 
    Query1->SQL->Add("GROUP BY Zeit");
    Query1->SQL->Add("ORDER BY Zeit ASC");
    

    das geht aber nicht da in meinem DBChart die die Werte die Angezeigt werden ja fest zugeordnet sind mit "Anzahl" und Datum". Da der Wert Datum ja jetzt nicht mehr vorhanden ist kommt ein fehler.

    Also wie mache ich es das mein DBChart auch die neuen Werte übernimmt oder kann ich an stelle von "Datum" auch eine Variable nehmen die ich immer neu zuordne? Wenn ja, wie?


Anmelden zum Antworten