Klaus: Abfrage als Vergleich zweier Datensätze möglich?

Hallo,

stellt euch vor, ich habe eine Tabelle in der ich wöchtentlich die Preisentwicklung einiger Artikel speichere. Wie z.B. die Spritpreise (nur als Beispiel).
Ich habe in der Tabelle also die Kalenderwoche, die Artikelnummer und den Preis.

Kann ich in einer Abfrage realisieren, dass ich 2 Kalenderwochen miteinander vergleichen kann?

Problematisch wird es wohl noch bei Nichtvorhandensein eines Artikels in einer der zu vergleichenden Wochen. Hier sollte dann Null als Preis angezeigt werden.
(Um beim Beispiel zu bleiben, kam irgendwann der E10 dazu, oder "verbleit" fiel weg)

Klaus

  1. Tach!

    Kann ich in einer Abfrage realisieren, dass ich 2 Kalenderwochen miteinander vergleichen kann?

    Datensätze einer Tabelle lassen sich nicht untereinander vergleichen. Du kannst aber dieselbe Tabelle nochmal unter einem anderen Alias joinen und dann die Vergleiche durchführen.

    Problematisch wird es wohl noch bei Nichtvorhandensein eines Artikels in einer der zu vergleichenden Wochen. Hier sollte dann Null als Preis angezeigt werden.

    Das kommt auf die Art des Joins an, ob wenigstens ein Datensatz ((Left) Outer Join) oder keiner (Inner Join) den Weg in die Ergebnismenge findet.

    dedlfix.

    1. Das kommt auf die Art des Joins an, ob wenigstens ein Datensatz ((Left) Outer Join) oder keiner (Inner Join) den Weg in die Ergebnismenge findet.

      Ich habe es mit
      select a.feld1,a.feld2,a.woche as woche1, a.wert as wert1, b.woche as woche2,b.wert as wert2 from test2 as a left join test2 as b on a.feld1 = b.feld1 where a.woche = 10 and b.woche = 15

      versucht, aber erhalte nur die Einträge, die in beiden Wochen existieren.

      Ich habe mit left join, left outer join, inner join etc. probiert, aber bekam nie alle Einträge.

      1. Tach!

        Ich habe es mit

        select a.feld1,a.feld2,a.woche as woche1, a.wert as wert1, b.woche as woche2,b.wert as wert2

        from test2 as a
        left join test2 as b on a.feld1 = b.feld1
        where a.woche = 10 and b.woche = 15

        
        > versucht, aber erhalte nur die Einträge, die in beiden Wochen existieren.  
          
        Wenn du feld1 mit feld1 verbindest, kommen immer links und rechts Ergebnisdatensätze zustande, weil zu jedem Wert in feld1 (was auch immer da drin stehen mag) der Tabelle a auch immer mindestens derselbe Datensatz in Tabelle b gefunden wird und niemals eine der beiden Seiten null werden kann. Damit hast du trotz "left" das Resultat eines Inner Join. Und dann filtert dein WHERE den nicht angezeigten Rest weg. Die Verknüpfung der Wochen muss eine der Join-Bedung werden. (Dabei gehen auch Formeln à la ON a.woche = b.woche + 1.)  
          
          
        dedlfix.
        
        1. Die Verknüpfung der Wochen muss eine der Join-Bedung werden. (Dabei gehen auch Formeln à la ON a.woche = b.woche + 1.)

          Da der User vorgibt, welche beiden Wochen verglichen werden sollen. Dabei ist er frei, welche Woche er zuerst nennt, das kann also Woche 11 mit Woche 48 oder auch Woche 50 mit Woche 3 sein.

          Ich hab wirklich keine Idee, wie ich da die beiden Wochen verknüpfen könnte.

          Klaus

          1. Tach!

            Ich hab wirklich keine Idee, wie ich da die beiden Wochen verknüpfen könnte.

            Habs nicht probiert, aber vielleicht so?

            ... LEFT JOIN zweite tabelle mit alias ON deine erste bedingung AND a.woche = x AND b.woche = y

            dedlfix.

  2. Hallo,

    Kann ich in einer Abfrage realisieren, dass ich 2 Kalenderwochen miteinander vergleichen kann?

    Was soll denn der Vergleich erbringen? Die Preisentwicklung für ein bestimmtes Produkt?

    Eine diesbezügliche Abfrage wird auf einen Selfjoin (danke dedlfix) hinauslaufen, where klauselt das Produkt und between die Zeiträume.

    Problematisch wird es wohl noch bei Nichtvorhandensein eines Artikels in einer der zu vergleichenden Wochen. Hier sollte dann Null als Preis angezeigt werden.

    Kein Problem.

    Schöne Grüße.

    --
    Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.
    1. Kann ich in einer Abfrage realisieren, dass ich 2 Kalenderwochen miteinander vergleichen kann?

      Was soll denn der Vergleich erbringen? Die Preisentwicklung für ein bestimmtes Produkt?

      Letztlich ist es etwas komplizierter, also Vergleich Warenausgang, offene Liefermenge pro Kunde, Artikel und eben 2 Kalenderwochen miteinander gegenübergestellt.

      Ein anderes Beispiel könnte es vielleicht besser veranschaulichen.
      Nehmen wir die gemessenen Durchschnittstemperaturen pro Monat und Urlaubsziel.
      Der Benutzer möchte zwei Monate direkt miteinander vergleichen.
      Pro Monat können aber auch Urlaubsziele hinzukommen und auch welche wegfallen.

      Die Tabelle enthält die Felder (das Jahr mal vernachlässigt und nur positive Temperaturen) Ziel, Monat, und Temperatur.

      Mir ist nicht klar, wie die Abfrage aussehen könnte, wenn die Quelle bsp. so aussieht:

      Ziel1   01   20
      Ziel2   01   15
      Ziel3   01   05
      Ziel1   05   34
      Ziel3   05   11
      Ziel4   05   17

      Und als Ergebnis sowas rauskommen soll:

      Ziel1   01   20   05   34
      Ziel2   01   15   05   leer (oder auch 0)
      Ziel3   01   05   05   11
      Ziel4   01   leer 05   17

      Klaus

      1. Kann ich in einer Abfrage realisieren, dass ich 2 Kalenderwochen miteinander vergleichen kann?

        Was soll denn der Vergleich erbringen? Die Preisentwicklung für ein bestimmtes Produkt?

        Letztlich ist es etwas komplizierter, also Vergleich Warenausgang, offene Liefermenge pro Kunde, Artikel und eben 2 Kalenderwochen miteinander gegenübergestellt.

        Ein anderes Beispiel könnte es vielleicht besser veranschaulichen.
        Nehmen wir die gemessenen Durchschnittstemperaturen pro Monat und Urlaubsziel.
        Der Benutzer möchte zwei Monate direkt miteinander vergleichen.
        Pro Monat können aber auch Urlaubsziele hinzukommen und auch welche wegfallen.

        Die Tabelle enthält die Felder (das Jahr mal vernachlässigt und nur positive Temperaturen) Ziel, Monat, und Temperatur.

        Mir ist nicht klar, wie die Abfrage aussehen könnte, wenn die Quelle bsp. so aussieht:

        Temperaturentwicklung ist dasselbe in grün wie die Preisentwicklung:

        • Select Temperatur a, Temperatur b From tab as a join tab as b
        • 2 Zeiträume (between Montag and Freitag), dafür joinen wir tab mit sich selbst
        • das Ziel in der Join-Bedingung Using(Zielort)
        • Where Klause für Zielort = 'Attersee' z.B.

        Ich würde ein Statement präparieren und das für jeden Zielort einzeln feuern, Zielort als Platzhalter. Die Darstellung könnte ein Liniendiagramm sein, wobei die Farbe einer Linie einem Zielort zugeordnet ist.

        Ungetested ;)