kaest: Abfrageproblem mit mehreren Ergebnissen

Hallo,

ich habe folgendes Problem mit einer SQL-Abfrage.

Die Tabelle hat in Spalte A den einen festen Eventtext und in Spalte B einen Timestamp zu diesem Event.

Die Abfrage soll gezielt Eventtext 1 und Eventtext 2 aus Spalte A mit dem jeweiligen zugehörigen Timestamp liefern.

Leider habe ich keine Ahnung wie ich das abfragen muss. Würd mich freuen wenn mir jemand helfen könnte. :-)

Danke und Gruß, Kaes

  1. Hi kaest!

    Leider habe ich keine Ahnung wie ich das abfragen muss. Würd mich freuen wenn mir jemand helfen könnte. :-)

    SELECT t.A,t.B  
    FROM table t  
    WHERE t.A = "Eventtext 1"  
       OR t.A = "Eventtext 2"
    

    Ich glaube das war zu einfach... =)
    Wie lautet dein Problem wirklich und wo kommst du nicht weiter?

    MfG H☼psel

    --
    "It's amazing I won. I was running against peace, prosperity, and incumbency."
    George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
    Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:? n4:& ss:| de:] js:| ch:? sh:( mo:) zu:)
    1. NE mein Problem is doch ein wenig umfrangreicher :/

        
      SELECT DISTINCT auf.aufnr lieferung,  
      	   aufgrp.aufgrpnam hls,  
      	   aufgrp.aufgrpbez hls_bezeichnung,  
      	   DECODE (aufgrp.aufgrpbrsart,  
      	   	 10, 'VRS',  
                       20, 'EXP',  
                       30, 'VNB',  
                       40, 'TOR_DIREKT') Bereitstellungsart,  
      	   TO_DATE (auf.dzins, 'DD.MM.YY') datum_lieferungsanlage,  
      	   TO_DATE (aufgrp.dzins, 'DD.MM.YY') datum_hlsanlage,  
      	   TO_DATE (evt.evtdz, 'DD.MM.YY') hls_bearbeitet,  
      	   TO_DATE (aufgrp.aufgrpdzwafrei, 'DD.MM.YY') hls_borderoquit  
        FROM auf_t auf, tour_t tour, aufgrp_t aufgrp, evt_t evt  
       WHERE auf.tournam IN (SELECT tournam  
                           FROM tour_t  
                          WHERE aufgrpnam IN (SELECT aufgrpnam  
                                                FROM aufgrp_t  
                                               WHERE gpnamsped = '64071')  
      					  AND aufgrpnam = '5103370')  
        AND evt.evtobjid = aufgrp.aufgrpnam  
        AND tour.aufgrpnam = aufgrp.aufgrpnam  
        AND auf.tournam = tour.tournam  
      /**  AND evt.evttxt = 'HLS-Statusänderung von Freigegeben/Disponiert nach Gestartet'**/  
        AND evt.evttxt = 'HLS-Statusänderung von Gestartet nach Bearbeitet' as datum1  
      /**  AND evt.evttxt = 'HLS-Statusänderung von Bearbeitet nach Bereitgestellt' as datum2 **/  
        AND auf.dzins > TO_DATE ('01.01.09 00:00', 'DD.MM.YY HH24:MI')  
        AND auf.dzins < TO_DATE ('30.04.09 23:59', 'DD.MM.YY HH24:MI')  
      
      

      Das ist meine komplette Abfrage.

      Aus der Tabelle evt_t benötige ich 2 unterschiedliche timestamps (Spalte evtdz). Diese kann ich allerdings nur über die Spalte evttxt selektieren, da in dieser Spalte die eindeutigen Kriterien hinterlegt sind.

      Ich möchte jetzt für jedes Ergebnis (aufnr) in einer Spalte den timestamp A und den Timestamp B haben. Und nicht eine Zeile für aufnr mit dem Timestamp A und eine neue Zeile mit dem timestamp B

      Is das so verständlich ?

      Schöne Grüße, Kaest

      Hi kaest!

      »» Leider habe ich keine Ahnung wie ich das abfragen muss. Würd mich freuen wenn mir jemand helfen könnte. :-)

      SELECT t.A,t.B

      FROM table t
      WHERE t.A = "Eventtext 1"
         OR t.A = "Eventtext 2"

      
      >   
      > Ich glaube das war zu einfach... =)  
      > Wie lautet dein Problem wirklich und wo kommst du nicht weiter?  
      >   
      > MfG H☼psel
      
      1. moin,

        wenn man deine erste, einfache fragestellung ließt und dann die zugehörige abfrage dazu sieht, dann bekommt man ja glatt einen schreck, lach. aber wie auch immer, deine frage ist schon ein paar tage her und falls du noch interesse an einer lösung hast (korrelierte unterabfragen), dann sag bescheid.

        Ilja

        1. hallo,

          war ein paar tage beruflich unterwegs, daher kommt jetzt erst eine antwort.

          ich bin natürlich immer noch gerne an einer antwort interessiert.

          schöne grüße, kaest

          moin,

          wenn man deine erste, einfache fragestellung ließt und dann die zugehörige abfrage dazu sieht, dann bekommt man ja glatt einen schreck, lach. aber wie auch immer, deine frage ist schon ein paar tage her und falls du noch interesse an einer lösung hast (korrelierte unterabfragen), dann sag bescheid.

          Ilja

          1. moin,

            ich bin natürlich immer noch gerne an einer antwort interessiert.

            er einmal ein paar grundsätzlich hinweise. du benutzt die implizite JOIN schreibweise, die ist sachlich gesehen nicht falsch, aber es ließt sich ungemein schwieriger und verleitet auch leichter zu fehler. es empfiehlt sich immer, die explizite schreibweise von joins zu benutzen, also:

            SELECT spalte1, sspalte2...
            FROM tabelle1 t1
            INNER JOIN tabelle2 t2 ON t2.joinspalte = t1.joinspalte
            WHERE ....
            ;

            ein weiterer hinweis ist der, dass du in der unterabfrage noch mal die tabelle "tour_t" angibst mit ebenfalls einer zugehörigen unterabfrage. diese doppelt verschattelte unterabfrage scheint mir auf den ersten blick überflüssig zu sein, zumal du auch den aliasnamen vergessen hast. es empfiehlt sich immer aliasnamen zu benutzen, erst recht, wenn die gleiche tabelle mehrfach in einer abfrage vorkommt.

            der dritte hinweis ist der, dass joins "böse" sein können. das liegt an der art der beziehung der tabellen untereinander haben können, nämlich 1:N. damit können sich die datensätze in der ergebnismenge vervielfachen und das scheint mir auch bei dir zu passieren, das schlüsselwort DISTINCT ist immer ein guter hinweis darauf. besser ist es oftmals, in der FROM klausel die tabellen einzubeziehen, die auch immer die richtige anzahl an daetnsätze in der ergebnismenge wiedergibt. braucht man dann noch zusätzliche informationen aus anderen tabellen in der ausgaben, ist es meiner efahrung nach ratsamer korrelierte unterabfragen zum einsatz kommen zu lassen, weil damit die ergebnismenge gleich bleibt.

            aber um das alles genauer sagen zu können, ist es wichtig, dass du mal aus fachlicher sicht erklärst, wofür die tabellen genau sind und wie sie in beziehung miteinander stehen. am besten auch immer mit beispieldaten. je ausführlicher du das erklärst, um so schneller können wir dir helfen. wichtig ist dabei, es ist eine fachliche sichtweise, also keine sql.

            ps: deine tabellennamen finde ich nicht sehr selbsterklärend, könnte man verbessern, wenn die möglichkeit dazu besteht.

            Ilja

  2. Hello,

    ich habe folgendes Problem mit einer SQL-Abfrage.

    Die Tabelle hat in Spalte A den einen festen Eventtext und in Spalte B einen Timestamp zu diesem Event.

    Die Abfrage soll gezielt Eventtext 1 und Eventtext 2 aus Spalte A mit dem jeweiligen zugehörigen Timestamp liefern.

    Leider habe ich keine Ahnung wie ich das abfragen muss. Würd mich freuen wenn mir jemand helfen könnte. :-)

      
      
    SELECT eventtext, zeit  
    FROM   tabelle  
    WHERE  zeit = zeitstempel1  
    OR     zeit = Zeitstempel2;  
      
    
    

    Meisnt Du das?

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
    Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de