SELECT - Gruppierung nach Typ und Zeit

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • SELECT - Gruppierung nach Typ und Zeit

    Hallöchen,

    habe da mal ein kleines Problem... vielleicht kann mir ja da jemand weiterhelfen.

    Und zwar habe ich eine Tabelle mit 3 Spalten (ID, Artikel, Zeit).

    Nun möchte ich gern diese Daten nach Artikel und Zeit gruppieren...

    Bsp.:

    ID | Artikel | Timestamp
    ----------------------------------
    1 | A | 2006-12-28 00:00:00
    2 | A | 2006-12-28 01:00:00
    3 | B | 2006-12-28 02:00:00
    4 | B | 2006-12-28 03:00:00
    5 | B | 2006-12-28 04:00:00
    6 | A | 2006-12-28 05:00:00

    Herauskommen soll dann folgendes:

    Anzahl | Artikel
    ----------------
    2 | A
    3 | B
    1 | A

    Leider bekomme ich das nicht hin...

    SELECT
    count(artikel) as anzahl, artikel
    FROM
    test
    GROUP BY
    artikel;

    So werden ja jeweils immer alle Artikel gruppiert, ich möchte aber halt zusätzlich noch nach der Zeit gruppieren, wobei die Zeitspanne immer unterschiedlich sein kann!

    Kann mir jemand weiterhelfen? Schonmal Danke im Voraus.

    Grüße

  • #2
    Hi,

    ich würde das Statement noch um ein WHERE erweitern:

    WHERE Timestamp >= Anfang AND Timestamp <= Ende

    Grüße
    Strauberry

    Kommentar


    • #3
      Ja okay... aber das Problem besteht ja, dass die Zeiten, also auch die Zeitspannen unterschiedlich groß sein können.

      Kommentar


      • #4
        Was ist denn das Ziel? Rausfinden, wieviele Elemente in einem bestimmten Zeitfenster liegen?

        Kommentar


        • #5
          Das oben war nur ein vereinfachtes Beispiel. Um das ganze zu verdeutlichen...

          Das Ziel ist es, dass man die Menge der eingestellten Einträge (bspw. Artikel) pro Zeitraum erfassen und auswerten kann.

          Per PHP könnte ich das ganze in einer Schleife und einem Array lösen, wo dann nach der Zeit aufsteigend abgefragt wird, ob ein neuer Eintrag kommt und dann den Zähler wieder zurücksetzt... ist meiner Meinung nach etwas umständlich und ich hoffe das es da eine einfachere Variante per SQL gibt!?

          Kommentar


          • #6
            Aber "pro Zeitraum" heißt doch, dass man den Zeitraum einschränkt. Oder soll das ganze z.B. nach Monat usw. zusammengefasst sein?

            Kommentar


            • #7
              Hier noch einmal ein Beispiel:

              ------------------------------
              ID | Typ | Zeit
              ------------------------------
              1 | 1 | 2006-12-28 00:00:00
              2 | 1 | 2006-12-28 01:00:00
              3 | 1 | 2006-12-28 02:00:00
              4 | 1 | 2006-12-28 03:00:00
              5 | 2 | 2006-12-28 04:00:00
              6 | 2 | 2006-12-28 05:00:00
              7 | 2 | 2006-12-28 06:00:00
              8 | 3 | 2006-12-28 07:00:00
              9 | 1 | 2006-12-28 08:00:00
              10 | 1 | 2006-12-28 09:00:00
              11 | 2 | 2006-12-28 10:00:00
              12 | 2 | 2006-12-28 11:00:00
              13 | 2 | 2006-12-28 12:00:00
              14 | 2 | 2006-12-28 13:00:00
              15 | 2 | 2006-12-28 14:00:00
              16 | 3 | 2006-12-28 15:00:00
              17 | 3 | 2006-12-28 16:00:00
              18 | 3 | 2006-12-28 17:00:00
              19 | 3 | 2006-12-28 18:00:00
              20 | 1 | 2006-12-28 19:00:00
              ------------------------------

              Angenommen stündlich wird ein Eintrag in die Tabelle geschrieben, wobei der Typ manchmal gleich und manchmal unterschiedlich sein kann...

              Das Ergebnis sollte so aussehen (wobei die Angabe der Zeitspanne nur zeigen soll, dass diese unterschiedlich groß sein kann, also durch Angabe eines WHERE Zeit >= 'xx' AND Zeit <= 'xx, nicht die Lösung ist!):

              ----------------------------------------------------------
              Typ | Anzahl | (Zeitspanne)
              ----------------------------------------------------------
              1 | 4 | 2006-12-28 00:00:00 bis 2006-12-28 03:00:00
              2 | 3 | 2006-12-28 04:00:00 bis 2006-12-28 06:00:00
              3 | 1 | 2006-12-28 07:00:00 bis 2006-12-28 07:00:00
              1 | 2 | 2006-12-28 08:00:00 bis 2006-12-28 09:00:00
              2 | 5 | 2006-12-28 10:00:00 bis 2006-12-28 14:00:00
              3 | 4 | 2006-12-28 15:00:00 bis 2006-12-28 18:00:00
              1 | 1 | 2006-12-28 19:00:00 bis 2006-12-28 19:00:00
              ----------------------------------------------------------

              Es soll einfach, sobald ein neuer Typ auftritt, eine neue Zeile ausgegeben und die Anzahl der aufeinanderfolgenden gleichen Einträge hochgerechnet werden..!

              Habe schon überall gesucht, leider noch keine brauchbare Lösung gefunden... Hmm, wenn es keine Lösung per SQL geben sollte, werde ich das dann wohl per PHP machen müssen... wobei da aber sicherlich die Performance darunter leiden wird, da die Schleife mindestens 2 mal durchlaufen werden müsste...

              Kommentar

              Lädt...
              X