Announcement

Collapse
No announcement yet.

SQL Abfrage

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

  • SQL Abfrage

    Guten Morgen miteinander,

    vielleicht kann mir jemand bei einem kleinen Problem helfen .

    Folgende Situation ich hab 1 Tabelle die wie folgt aufgebaut ist

    Nummer | Version | Vorversion | Datumvon | Datumbis
    12345 | 1 | NULL | 01.01.2002 | 01.01.2003
    12345 | 2 | 1 | 01.01.2003 | 01.01.2004
    12345 | 3 | 2 | 01.01.2002 | 01.01.2003

    normalerweise sollte bei version 3 "Datumvon" der 01.01.2004 sein

    Nun muss von der "Version" 1 das "Datumbis" mit der "Vorversion" 1 das "Datumvon" verglichen werden. Sozusagen über kreuz 1 mit 1 und 01.01.2003 mit 01.01.2003 (aus Zeile 2)

    Falls die Datümer != sind soll die dazugehörige "Nummer" ausgegeben werden.


    Ich danke für jede Hilfe

    Grüße
    Zuletzt editiert von Doodl; 04.08.2009, 12:23.

  • #2
    Hallo,

    ich denke mal das sollte mit einem einfachen Join zu lösen sein.
    [highlight=sql]
    select Nummer
    from Tabelle a
    inner join Tabelle b on b.Version = a.Vorversion and b.Datumvon != a.Datumbis
    [/highlight]

    Gruß Falk
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment


    • #3
      Re

      Hab es nun so gelöst hab aber nun bei der ausgabe das problem das ich nur die nummer 1 mal haben möchte und nicht 5 mal die gleiche vielleicht fällt jemand aus dem Stand heraus sofort ne Lösung ein xD

      Ausgabe ist z.B. so
      nummer
      1
      1
      2
      2
      3

      soll aber so sein
      nummer
      1
      2
      3

      und in dem unten stehenden prozess miteinfließen xD also nichts mit distinct

      Grüße

      SET SERVEROUTPUT ON

      DECLARE
      v_datumvon tabelle.datumvon%TYPE;
      v_datumbis tabelle.datumbis%TYPE;
      v3_datumvon tabelle.datumvon%TYPE;
      v3_datumbis tabelle.datumbis%TYPE;

      CURSOR C_TEST
      IS
      SELECT v.nummer, v.version, v.vorversion
      ,v.datumvon, v.datumbis
      FROM tabelle v
      WHERE v.nummer < 1000000000
      ORDER BY v.nummer, v.version;

      BEGIN
      FOR v_counter IN C_TEST
      LOOP
      IF
      v_counter.nummer = 1 THEN
      v3_datumvon := v_counter.datumvon;
      v3_datumbis := v_counter.datumbis;
      ELSE
      v_datumvon:= v_counter.datumvon;
      v_datumbis:= v_counter.datumbis;

      IF
      v3_endedatum > v_beginndatum
      THEN DBMS_OUTPUT.PUT_LINE(v_counter.nummer);
      END IF;
      v3_datumvon := v_counter.datumvon;
      v3_datumbis := v_counter.datumbis;
      END IF;
      END LOOP;
      EXCEPTION
      WHEN OTHERS
      THEN
      DBMS_OUTPUT.PUT_LINE(sqlerrm);
      END;

      Comment

      Working...
      X