Partage
  • Partager sur Facebook
  • Partager sur Twitter

Query date casse tête

SQL

Sujet résolu
    9 juillet 2019 à 10:25:58

    Bonjour,

    Mon problème est le suivant, je voudrais que lorsque on lance la requête, on obtienne le résultat de tout le mois précédent ainsi que de tout le mois précédent de l'année passé. Par exemple, aujourd'hui 09/07/2019; si je lance ma requête, je devrais avoir les résultats de l’entièreté du mois de juin 2019 et juin 2018.

    ma requête est

    select Year(Date) as Year, Month(Date) as Month

    ,sum(MsgLogicalCount) as volume

    ,sum(MsgPhysicalCount) as Physical

    from staging.InvDataCompany

    where date >= '2019-05-01' and date < '2019-06-01'

    and (rectype = 4 or rectype = 5) and subrectype = 1

    group by Year(Date), Month(Date)

    order by Year(Date), Month(Date)

    Pourriez-vous m'aider, s'il vous plait?

    D'avance, merci

    Thierry

    -
    Edité par ThierryCuvelier 9 juillet 2019 à 10:26:25

    • Partager sur Facebook
    • Partager sur Twitter
      9 juillet 2019 à 11:34:21

      Essaye ça :
      WHERE YEAR(NOW()) - Year IN (0,1)
        AND MOD(MONTH(NOW()) - Month, 12) = 0
      Je suppose que ça se comprend ? Sinon n'hésite pas à demander des explications

      -
      Edité par Zachee54 9 juillet 2019 à 11:34:53

      • Partager sur Facebook
      • Partager sur Twitter
        9 juillet 2019 à 15:26:57

        Merci Zachee54 !

        J'aurais dû préciser que c'est tsql.

        "NOW" ne fonctionne pas, j'ai dû utiliser "GETDATE"

        Il bloque maintenant sur MOD. J'ai vu sur le net de le remplacer par % mais cela ne fonctionne toujours pas, "'MOD' is not a recognized built-in function name."

        Pourrais tu me donner encore un petit coup de pouce, stp?

        Merci beaucoup.

        Thierry

        • Partager sur Facebook
        • Partager sur Twitter
          9 juillet 2019 à 15:37:56

          BOnjour,

          En TSQL, modulo est un opérateur (%), pas une fonction. La syntaxe est donc différente.

          WHERE mois % 12 = 0

          Après sans modulo, il y a :

          select
          	Year(Date) as Year,
          	Month(Date) as Month,
          	sum(MsgLogicalCount) as volume,
          	sum(MsgPhysicalCount) as Physical
          from staging.InvDataCompany
          where
          	Year(date) >= Year(GETDATE())-1
          	and Month(Date) = Month(GETDATE())-1
          	and (
          		rectype = 4
          		or rectype = 5
          	)
          	and subrectype = 1
          group by Year(Date), Month(Date)
          order by Year(Date), Month(Date)

          -
          Edité par Benzouye 9 juillet 2019 à 15:48:58

          • Partager sur Facebook
          • Partager sur Twitter
          Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
            9 juillet 2019 à 15:46:43

            @Benzouye Le problème est qu'il veut le mois précédent, pas le mois en cours.

            D'ailleurs vu comme ça mon code est faux. Il faudrait écrire :

            (MONTH(GETDATE()) - MONTH(Date)) % 12 = 1

            -
            Edité par Zachee54 9 juillet 2019 à 15:48:31

            • Partager sur Facebook
            • Partager sur Twitter
              9 juillet 2019 à 15:49:54

              Zachee54 a écrit:

              il veut le mois précédent, pas le mois en cours

              Ah oui ! Bah c'est juste un moins 1 du coup ... j'ai édité mon message précédent ... Je trouve cela moins tordu en fait :p

              • Partager sur Facebook
              • Partager sur Twitter
              Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                9 juillet 2019 à 17:27:40

                Benzouye a écrit:

                Ah oui ! Bah c'est juste un moins 1 du coup ... j'ai édité mon message précédent ... Je trouve cela moins tordu en fait :p

                Hé bé non, parce que quand on est en janvier (1) il faut chercher les mois de décembre (12). D'où la nécessité du modulo.
                • Partager sur Facebook
                • Partager sur Twitter
                  9 juillet 2019 à 17:41:58

                  Zachee54 a écrit:

                  quand on est en janvier (1) il faut chercher les mois de décembre (12)

                  Score ! Comment je suis vexé et piqué à vif dans mon amour propre :D

                  • Partager sur Facebook
                  • Partager sur Twitter
                  Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                    10 juillet 2019 à 19:03:51

                    J'en rajoute une couche : quand on est en janvier N, il faut les mois de décembre N-1 et décembre N-2 (pas N et N-1).

                    Le bon code est donc :

                    WHEN YEAR(GETDATE)) - IF(MONTH(GETDATE())=1, 1, 0) - YEAR(Date) IN (0, 1)
                     AND (MONTH(GETDATE()) - MONTH(Date))) % 12 = 1

                    Ou mieux :

                    WHEN YEAR(GETDATE() - 1 MONTH) - YEAR(Date) IN (0, 1)
                     AND MONTH(GETDATE() - 1 MONTH) = MONTH(Date)
                    • Partager sur Facebook
                    • Partager sur Twitter

                    Query date casse tête

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown