Announcement

Collapse
No announcement yet.

Datumsabfrage

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

  • Datumsabfrage

    hallo!

    ich hoffe mir kann jemand weiterhelfen. ich denke für profis wird das kein problem sein

    ich möchte daten ausgegeben bekommen vom letzten monat. ich habe die komplette abfrage schon fertig es fehlt mir nur noch der filter nach datum. also wenn märz ist möchte ich die daten vom februar und wenn april ist möchte ich die daten vom märz etc.

    bis jetzt sieht meine abfrage so aus:

    select xxx from xxx
    where xxx
    and xxx
    and xxx
    .
    .
    .
    group by xxx

    was muss ich jetzt noch einfügen damit ich nur die daten vom letzten monat bekomme?
    das datum ist in dd.mm.yyyy hh24:mi angegeben ich brauche aber wie gesagt nur den betroffenen monat.

    vielen dank schon mal im voraus für jegliche antworten!

    mfg.
    jasmin.

  • #2
    where TRUNC(datumsfeld,'MM')=ADD_MONTHS(TRUNC(sysdate,'M M'),-1)

    Gruß

    Ralf

    Comment


    • #3
      es hat funktioniert vielen dank! auch wenn mein kollege jammert aber das klär ich morgen
      aber vielen dank ich war kurz vorm nervenzusammenbruch als blutiger sql anfänger

      Comment


      • #4
        Und wieso jammert da dein Kollege???

        Ralf

        Comment


        • #5
          weil er ein declare haben wollte mit beginn und end und das trunc und add_months im oberen teil der abfrage wenn ich mich recht erinnere zwischen select und from und nicht mitten in der abfrage.

          jasmin.

          Comment


          • #6
            weil er ein declare haben wollte mit beginn und end und das trunc und add_months im oberen teil der abfrage wenn ich mich recht erinnere zwischen select und from und nicht mitten in der abfrage.
            Das ist ein Dummschwätzer, der davon keine Ahnung hat. Lass dir von dem blos nichts einreden.

            Dim
            Zitat Tom Kyte:
            I have a simple philosophy when it comes to the Oracle Database: you can treat it as a black box and just stick data into it, or you can understand how it works and exploit it as a powerful computing environment.

            Comment


            • #7
              ja ich weiß das blöde ist nur dass ich praktikantin hier bin und wenn er mich noch 4 wochen davor sitzen lassen will weil ihm die schriftart nicht gefällt dann werde ich auch in 4 wochen noch davor sitzen er hat ja schon gesehn dass es funktioniert er will trotzdem noch dran sitzen bzw mich dran sitzen lassen bis es so aussieht wie es ihm gefällt...

              es soll ungefähr so aussehn:


              declare
              test DATE := TRUNC(ADD_MONTHS(sysdate,-1),'MM');

              cursor c_xxx is
              select xxx from xxx
              where xxx
              and xxx
              and TRUNC(datumsfeld)=trunc(test)
              .
              .
              .
              group by xxx;

              begin
              dbms_output.put_line (TRUNC(ADD_MONTHS(sysdate,-1),'MM'));
              end;


              ich bin noch am werkeln und er ist in pause :P

              Comment


              • #8
                also ich habs jetzt das müsste ihm so passen es fehlt nur noch die ausgabe.
                bis jetzt siehts so aus:

                declare
                monat VARCHAR (10) := TO_CHAR(add_months(SYSDATE, -1), 'MM');

                cursor c_xxx is
                select xxx from xxx
                where xxx
                and xxx
                and and TRUNC(datumsfeld)=(monat)
                and xxx
                .
                .
                .
                group by xxx;

                begin
                dbms_output.put_line (monat);
                end;

                jetzt muss ich nur noch rausfinden wie ich den cursor ausgebe und ich bin fertig.
                falls dazu jemand was weiß bin ich dankbar für jeden tip!

                @ralf: danke! sonst würd ich noch ne ewigkeit dransitzen!

                jasmin.

                Comment


                • #9
                  da ist natürlich ein "and" zuviel vor dem trunc!

                  Comment


                  • #10
                    Originally posted by jasmin.aj View Post
                    monat VARCHAR (10) := TO_CHAR(add_months(SYSDATE, -1), 'MM');
                    Wenn schon so umständlich, dann mach hier lieber
                    monat DATE := add_months ...

                    and and TRUNC(datumsfeld)=(monat)
                    und hier muss noch ein 'MM' ins Trunc, sonst wird nur auf den aktuellen Tag abgeschnitten und dann stimmt der Vergleich nicht, wenn deine Datumsfelder nicht alle am 1. beginnen.

                    Für die Cursorausgabe nimmst du am besten so etwas:

                    for rec in c_xxx loop
                    dbms_output.put_line(rec.feld1);
                    end loop;

                    @ralf: danke! sonst würd ich noch ne ewigkeit dransitzen!
                    Gern geschehen.

                    Ralf

                    Comment


                    • #11
                      danke für die antwort!
                      ich weiß nur leider nicht was ich für rec und rec.field1 einsetzen muss :S ist ne verschachtelte abfrage...


                      declare
                      monat date := (add_months(SYSDATE, -1), 'MM');

                      cursor c_xxx is

                      select klient, sum (abc) abc, sum (def) def from

                      (

                      select pa.id_klient klient, count (*) abc, 0 def from xxx pa, yyy auf
                      where xxx
                      and xxx
                      and TRUNC(pa.time_neu,'MM')=(monat)
                      .
                      .
                      .
                      group by pa.id_klient

                      union all

                      select pa.id_klient klient, 0 abc, count (*) def from xxx pa, yyy auf
                      where xxx
                      and xxx
                      and TRUNC(pa.time_neu,'MM')=(monat)
                      .
                      .
                      .
                      group by pa.id_klient)
                      group by klient;

                      begin

                      for ??? in c_xxx
                      loop
                      dbms_output.put_line(???.???);
                      end loop;
                      dbms_output.put_line (monat);
                      end;


                      muss ich da noch was deklarieren?

                      jasmin.

                      Comment


                      • #12
                        Originally posted by jasmin.aj View Post
                        danke für die antwort!
                        ich weiß nur leider nicht was ich für rec und rec.field1 einsetzen muss :S ist ne verschachtelte abfrage...
                        declare
                        monat date := (add_months(SYSDATE, -1), 'MM');
                        cursor c_xxx is
                        select klient, sum (abc) abc, sum (def) def from
                        for rec in c_xxx
                        loop
                        dbms_output.put_line(rec.klient bzw. rec.abc oder rec.def)
                        ...

                        Deklarieren musst du da nichts. Rec wird einfach als ein interner Record verwendet, der die Felder des Cursors enthält.

                        Ralf

                        Comment


                        • #13
                          er bringt mir bei allen diese fehlermeldung:

                          [1]: (Error): ORA-01840: input value not long enough for date format
                          ORA-06512: at line 98



                          naja vielleicht brauch ich einfach nur wochenende um wieder einen klaren kopf zu bekommen. ich versuchs nächste woche nochmal.
                          vielen dank für die hilfe und ein schönes wochenende!

                          jasmin.

                          Comment

                          Working...
                          X