Announcement

Collapse
No announcement yet.

die letzten 5 Monate im Select

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

  • die letzten 5 Monate im Select

    Moin zusammen,

    ich bin auf der Suche nach dem richtigen SQL-Statement welches mir dynamisch die letzten 6 Monate als Zahlen liefert. Also wenn ich den Befehl im Juli absetze möchte ich als Ergebnis 1,2,3,4,5,6 zurückbekommen.
    Mein Ansatz ist folgender:
    select month(dateadd(mm, 0, getdate())) liefert mir die 7.

    Kann mir jemand auf die Sprünge helfen?

    Gruß

    Martin

  • #2
    Der Ansatz passt schon, nimm einfach mal negative Werte, also zB:
    select month(dateadd(mm,-6,getdate()),month(dateadd(mm,-5,getdate()),...

    bye,
    Helmut

    Comment


    • #3
      DATEADD addiert zu einem Datum einen Wert hinzu; Du addierst 0 also bekommst Du den aktuellen Monat.

      [highlight=SQL]select month(dateadd(mm, -1, getdate())),
      month(dateadd(mm, -2, getdate())),
      month(dateadd(mm, -3, getdate())),
      month(dateadd(mm, -4, getdate())),
      month(dateadd(mm, -5, getdate())),
      month(dateadd(mm, -6, getdate()))[/highlight]
      Olaf Helper

      <Blog> <Xing>
      * cogito ergo sum * errare humanum est * quote erat demonstrandum *
      Wenn ich denke, ist das ein Fehler und das beweise ich täglich

      Comment


      • #4
        Moin und Danke für Eure Antworten!

        @ O. Helper:

        Leider kann ich das so nicht verwenden. Vielleicht hätte ich besser gleich das vollständige SQL posten sollen.

        Select * from MeineTabelle where Monat in (select month(dateadd(mm, -1, getdate())))
        Wenn ich hier deinen Vorschlag in die Klammern kopiere kommt folgende Meldung:

        Only one expression can be specified in the select list when the subquery is not introduced with EXISTS.

        Vielleicht noch ne Idee?

        Comment


        • #5
          [HIGHLIGHT="SQL"]
          SELECT *
          FROM MeineTabelle
          WHERE Monat IN (
          SELECT month (dateadd(mm, -1, getdate()))
          UNION ALL SELECT month(dateadd(mm, -2, getdate()))
          UNION ALL SELECT month(dateadd(mm, -3, getdate()))
          UNION ALL SELECT month(dateadd(mm, -4, getdate()))
          UNION ALL SELECT month(dateadd(mm, -5, getdate()))
          UNION ALL SELECT month(dateadd(mm, -6, getdate()))
          )
          [/HIGHLIGHT]

          Comment


          • #6
            Hallo Martin,

            da hattest Du Deine Anfrage falsch vormuliert, Du wolltes die letzte 5 Monate als Zahl.

            So kannst Du Daten der letzen 5 Monate selektieren, wobei das Jahr natürlich noch nicht berücksichtigt wird:

            [highlight=SQL]Select *
            from MeineTabelle
            where Monat BETWEEN month(dateadd(mm, -6, getdate()))
            AND month(dateadd(mm, -1, getdate()))[/highlight]
            Olaf Helper

            <Blog> <Xing>
            * cogito ergo sum * errare humanum est * quote erat demonstrandum *
            Wenn ich denke, ist das ein Fehler und das beweise ich täglich

            Comment


            • #7
              @O.Helper:

              Hier dürfte ich ein Problem zu Jahreswechsel bekommen.

              @ebis:

              Genau das isses!

              Besten Dank euch beiden!

              Gruß

              Martin

              Comment


              • #8
                Ich hab's noch um das Jahr ergänzt. Dann sollte es klappen.

                Code:
                where Monat in
                (SELECT month (dateadd(mm, -1, getdate()))
                UNION ALL SELECT      month(dateadd(mm, -2, getdate()))
                UNION ALL SELECT      month(dateadd(mm, -3, getdate()))
                UNION ALL SELECT      month(dateadd(mm, -4, getdate()))
                UNION ALL SELECT      month(dateadd(mm, -5, getdate()))
                UNION ALL SELECT      month(dateadd(mm, -6, getdate()))) 
                And Jahr in (SELECT year (dateadd(mm, -1, getdate()))
                UNION ALL SELECT      year(dateadd(mm, -2, getdate()))
                UNION ALL SELECT      year(dateadd(mm, -3, getdate()))
                UNION ALL SELECT      year(dateadd(mm, -4, getdate()))
                UNION ALL SELECT      year(dateadd(mm, -5, getdate()))
                UNION ALL SELECT      year(dateadd(mm, -6, getdate())))

                Comment


                • #9
                  Nur der Vollständigkeit halber, ein Problem beim Jahreswechsel hatte ich in beiden Fällen. Ich hab's jetzt so gelöst:

                  Code:
                  select  * from MeineTabelle
                  where cast(Monat as varchar) + '-' + cast(Jahr as varchar) in
                  (
                  SELECT cast(month (dateadd(mm, -1, getdate()))as varchar) + '-' + cast(year (dateadd(mm, -1, getdate()))as varchar)
                  UNION ALL SELECT cast(month (dateadd(mm, -2, getdate()))as varchar) + '-' + cast(year (dateadd(mm, -2, getdate()))as varchar)
                  UNION ALL SELECT cast(month (dateadd(mm, -3, getdate()))as varchar) + '-' + cast(year (dateadd(mm, -3, getdate()))as varchar)
                  UNION ALL SELECT cast(month (dateadd(mm, -4, getdate()))as varchar) + '-' + cast(year (dateadd(mm, -4, getdate()))as varchar)
                  UNION ALL SELECT cast(month (dateadd(mm, -5, getdate()))as varchar) + '-' + cast(year (dateadd(mm, -5, getdate()))as varchar)
                  UNION ALL SELECT cast(month (dateadd(mm, -6, getdate()))as varchar) + '-' + cast(year (dateadd(mm, -6, getdate()))as varchar)
                  UNION ALL SELECT cast(month (dateadd(mm, -7, getdate()))as varchar) + '-' + cast(year (dateadd(mm, -7, getdate()))as varchar)
                  )

                  Comment

                  Working...
                  X