Announcement

Collapse
No announcement yet.

Datumsbasierte Abfrage - neue Werte, alte Werte

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

  • Datumsbasierte Abfrage - neue Werte, alte Werte

    Hallo zusammen,

    irgendwie stoße ich gerade an die Grenze meiner SQL Skills und bitte deswegen hier um eure Hilfe. Zur Verdeutlichung worum es geht, habe ich die mir vorliegende Tabelle gezeichnet:
    screenshot_221.jpg

    Es geht hier um Daten die täglich neu hinzu kommen. Außerdem ist es eine MxN aufschlüsselnde Tabelle die noch weitere Daten enthält (die hier aber keine Rolle spielen).

    Die Tabelle hat einen Primärschlüssel (data_id). Die Farblich markierten key1, key2 und typ müssen mir irgendwie als "Schlüssel" für die Abfrage dienen. Wie zu erkennen ist, gehören jeweils A B und C an verschiedenen Tagen zusammen.

    Ich brauche jetzt zwei Abfragen. Zum einen sollen alle neue Werte ausgegeben werden, zum anderen sollen alle verschwundenen Werte ausgegeben werden. Ein Ergebnisbeispiel:

    Ergebnis Neue Werte:
    A, weil dieses am ersten Tag nicht vorhanden war

    Ergebnis verschwundene Werte:
    C, weil es am letzten Tag nicht mehr vorhanden ist.

    Als Rückgabe benötige ich natürlich key1, key2 und typ DISTINCT.

    Ich habe das Problem eigentlich schon per PHP gelöst. Da mache ich 2 Datenbankabfragen und Werte dann zwei Arrays gegeneinander aus. Das ist aber auf Dauer nicht performant, daher möchte ich das gerne per SQL Query lösen.

    Unterabfragen habe ich auch versucht, aber ich glaube das ist der falsche Ansatz. Selfjoin erscheint mir unsinnig.

    Wäre dankbar für jeden Tipp bzw. Lösungsansatz.

    Danke sehr!!!
    Attached Files

  • #2
    Originally posted by Biglebowski View Post
    H
    Ich brauche jetzt zwei Abfragen. Zum einen sollen alle neue Werte ausgegeben werden, zum anderen sollen alle verschwundenen Werte ausgegeben werden. Ein Ergebnisbeispiel:
    ..
    Ein Ergebnis Beispiel reicht mir nicht. Was ist deine Bezugsgröße für neu und alt, sicher nicht erstes Datum und letztes Datum.
    Stichtag? Aktuelles Datum? .. ?
    Wonach sortiert? ID, Date .. ?
    Was ist mit Daten die zwischendurch auftauchen und wieder verschwinden, sind die neu oder alt, gibt's die nicht?
    Gruß, defo

    Comment


    • #3
      Hi,

      schon mal vielen Dank für deine Antwort. Ich werde versuchen deine Fragen zu beantworten:

      Als neu zu bewerten sind alle rows, die am ersten Tag nicht vorhanden waren.
      Als dropped sind alle rows zu bewerten, die am letzten Tag nicht mehr vorhanden sind.

      Sortierung spielt keine Rolle. Nur key1, key2 und typ müssen DISTINCT gelistet sein.

      Daten die zwischendurch auftauchen spielen vorerst ebenfalls keine Rolle. Ich bin ja schon froh, wenn ich das so mal zum laufen bekomme. Da fehlt mir leider etwas die Übung verrückte SQL Querys zu schreiben.

      Ich hoffe ich konnte deine Fragen beantworten. Falls nicht, schreibe mir gerne noch einmal.

      PS: Habe im Web UNION kennengelernt. Ich glaube damit könnte man arbeiten. Aber bekomm das einfach damit nicht hin.

      Comment


      • #4
        Jetzt wissen wir immer noch nicht was erster Tag ist bzw. was letzter Tag ist. Ist das eine Info die in der Tabelle steckt? Oder wo kommt die her und in welcher Beziehung steht die zum Datum in der Tabelle.
        Wenn du in deinem letzten Beitrag mit Row nicht eine bestimmte Row in der Tabelle meinst sondern irgendwas davon abgeleitetes also zum Beispiel eine Aggregierung über Key1, Key2, Typ dann solltest du das deutlicher erklären.
        Wenn es zwischen erster und letzter Tag noch andere Tage gibt spielt der Fall das es zwar Daten am ersten und am letzten Tag aber nicht dazwischen (bzw. genau umgekehrt) eine Rolle?

        Comment


        • #5
          Originally posted by Biglebowski View Post

          Es geht hier um Daten die täglich neu hinzu kommen. Außerdem ist es eine MxN aufschlüsselnde Tabelle die noch weitere Daten enthält (die hier aber keine Rolle spielen).

          Die Tabelle hat einen Primärschlüssel (data_id). Die Farblich markierten key1, key2 und typ müssen mir irgendwie als "Schlüssel" für die Abfrage dienen. Wie zu erkennen ist, gehören jeweils A B und C an verschiedenen Tagen zusammen.

          Ich brauche jetzt zwei Abfragen. Zum einen sollen alle neue Werte ausgegeben werden, zum anderen sollen alle verschwundenen Werte ausgegeben werden. Ein Ergebnisbeispiel:

          Ergebnis Neue Werte:
          A, weil dieses am ersten Tag nicht vorhanden war
          Code:
          test=*# select * from biglebowski ;
           data_id | key1 | key2 |  datadate  | typ
          ---------+------+------+------------+-----
                 1 |    1 |    1 | 2014-08-06 | B
                 2 |    2 |    2 | 2014-08-06 | C
                 3 |    3 |    3 | 2014-08-07 | A
                 4 |    1 |    1 | 2014-08-07 | B
                 5 |    2 |    2 | 2014-08-07 | C
                 6 |    3 |    3 | 2014-08-08 | A
                 7 |    1 |    1 | 2014-08-08 | B
                 8 |    2 |    2 | 2014-08-08 | C
                 9 |    3 |    3 | 2014-08-09 | A
                10 |    1 |    1 | 2014-08-09 | B
          (10 rows)
          
          test=*# select distinct typ from biglebowski except select distinct typ from biglebowski where datadate = (select min(datadate) from biglebowski );
           typ
          -----
           A
          (1 row)
          
          test=*# select distinct typ from biglebowski except select distinct typ from biglebowski where datadate = (select max(datadate) from biglebowski );
           typ
          -----
           C
          (1 row)


          Als Rückgabe benötige ich natürlich key1, key2 und typ DISTINCT.

          Das erscheint mit nicht machbar, da der Record ja nicht vorhanden ist. Irgendwie erscheint mir das ganze Datenmodel etwas, ähm, komisch.

          Comment

          Working...
          X