Announcement

Collapse
No announcement yet.

Erweiterung einer Abfrage

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Erweiterung einer Abfrage

    Hi zusammen,

    ich habe mal wieder eine Frage. Es geht um eine Abfrage, welche ich gerne erweitern möchte. Mit aktueller Abfrage arbeite ich derzeit:

    select date(created_at) day,
    sum(case when (
    template = 'sample_A'
    ) then 1 else 0 end) as "Beispiel_A",
    sum(case when ( template = 'sample_B'
    ) then 1 else 0 end) "Beispiel_B"
    from Tabelle_XY
    where datediff(date(now()), date(created_at)) <= 10 group by date(created_at) order by 1

    Als Ergebnis erhalte ich so etwas:
    day Beispiel_A Beispiel_B
    22.01.2019 173 121
    23.01.2019 0 1
    24.01.2019 147 142
    25.01.2019 1 4
    26.01.2019 0 0
    27.01.2019 109 69
    28.01.2019 129 60
    29.01.2019 1 8
    30.01.2019 42 96
    31.01.2019 96 64
    01.02.2019 0 4
    Wie ihr seht, komme ich bei der Abfrage mit einer Tabelle (Tabelle_XY) aus, in der die Information steckt. Nun würde ich gerne in einem nächsten Schritt Information aus einer weiteren Tabelle hinzuziehen und diese als Ergebnis zwischen Spalte_A und Spalte_B platzieren. Die Tabelle um die es geht sieht so aus:

    Tabelle_ZZ:
    id path created_at tbd_id
    1 …sampleC… 22.01.2019 (Null)
    2 …sampleC… 22.01.2019 12
    3 …sampleD… 23.01.2019 13
    4 …sampleE… 22.01.2019 14
    5 …sampleD… 23.01.2019 (Null)
    6 ...sampleC… 23.01.2019 15
    Die erweiterte Abfrage soll folgendes Ergebnis produzieren:
    day Beispiel_A Beispiel_C Beispiel_D Beispiel_B
    22.01.2019 173 1 0 121
    23.01.2019 0 1 1 1
    24.01.2019 147 0 0 142
    25.01.2019 1 0 0 4
    26.01.2019 0 0 0 0
    27.01.2019 109 0 0 69
    28.01.2019 129 0 0 60
    29.01.2019 1 0 0 8
    30.01.2019 42 0 0 96
    31.01.2019 96 0 0 64
    01.02.2019 0 0 0 4
    Es soll dann gezählt werden wenn das Muster in path erkannt wird und tbd_id nicht NULL enthält... (path LIKE '%sampleC%' and tbd_id IS NOT NULL - für die Spalte Beispiel_C) und für die Spalte Beispiel_D analog mit sampleD...

    Ich stehe gerade auf dem Schlauch wie ich diese Abfrage erweitern müsste:

    select date(created_at) day,
    sum(case when (
    template = 'sample_A'
    ) then 1 else 0 end) as "Beispiel_A",
    sum(case when ( template = 'sample_B'
    ) then 1 else 0 end) "Beispiel_B"
    from Tabelle_XY
    where datediff(date(now()), date(created_at)) <= 10 group by date(created_at) order by 1

    Besten Dank für eure Hilfe!

    LG Felix

  • #2
    Hier müsstest Du vielleicht mal etwas die Handbremse ziehen und dich mit ein paar Grundlagen auseinandersetzen.
    Bei verschiedenen Datenquellen wäre erstmal die Frage, anhand welcher Informationen eine Zuordnung von Zeilen stattfindet.
    Hier wäre die Frage auf den ersten Blickt: path oder date oder beides oder was anderes als join felder?

    Dann arbeitest du auf bereits aggregierten Daten und möchtest offenbar Felder joinen, die in Deinem Beispiel nur noch als Aggregat angezeigt werden.
    Es ist nicht gerade transparent für Helfer.

    Vorgehen normalerweise:
    Datenbasis erstellen, also einen Query der alle Daten liefert, nicht aggregiert, richtig gejoined, nachprüfbar.
    Dann Auswahl der Spalten, nicht aggregierte, aggregierte und Art der Aggregation
    Fertig

    Also, versuch mal als erstes den Join ohne Group und Sum. Falls die Ausgaben zu unübersichtlich sind, einfach per Whereclause auf die letzten 2 Tage einschränken plus weitere Filter, wenn zu unübersichtlich.

    P.S.: Und wenn Du Code Tags verwendest, kann man etwas besser lesen, was Du postest.
    SQL Statements kann man auch formatieren, Beispiel:

    Code:
    select date(created_at) day,
           sum(case
                 when (template = 'sample_A') then 1
                 else 0
               end) as "Beispiel_A",
           sum(case
                 when (template = 'sample_B') then 1
                 else 0
               end) "Beispiel_B"
      from Tabelle_XY
     where datediff(date(now()), date(created_at)) <= 10
     group by date(created_at)
     order by 1  -- wenn Du das zitierst müsstest Du die Tags sehen
    -- Zur Formatierung gibt es notfalls online Tools, mittlerweile können das auch viele IDE oder Editoren

    Comment


    • #3
      Es handelt sich am Ende um eine reine Zählung eines Outputs auf Tagesbasis. gejoined werden können die beiden Tabellen über eine eindeutige id. Ich hatte gehofft, es ginge ggf. einfacher...

      Comment


      • #4
        Naja was erwartest Du? Das ist einfach zu abstrakt, was Du anführst.
        Wenn Du von einer eindeutigen ID sprichst zum Joinen, die nicht den von mir genannten Kriterien entspricht, wie sollen die dann genutzt werden.
        ID sind ja nicht zufällig eindeutig, Relationen haben eine Bedeutung, Spalten und Tabellennamen liefern das Verständnis, Möglichkeiten und Sinnhaftigkeit einer Abfrage.

        Vorschlag:
        Kopier Dein erstes Statement, tausche die Quelltabelle und mache vom Ergebnis einen Join mit dem Ergebnis der Ursprungstabelle über das Datumsfeld.

        Comment

        Working...
        X