IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement SQL Server Discussion :

Différence entre 2 dates avec une table CALENDAR


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Avril 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2016
    Messages : 5
    Par défaut Différence entre 2 dates avec une table CALENDAR
    Bonjour,
    Etant novice en SQL, je dois pour un reporting, soustraire les jours non actif de cette table pour calculer la différence entre deux dates


    Table CALENDAR

    CAKTSOC	CAKTTYPE	   CAKTCODE 	CAKJDATE	CACTJOUR	CACTSEMAIN	CACTACTIF	CACNNHEURE
    100	              01	      	                 20180702	       1	        27	              O	               7.00
    100	              01	      	                 20180703	       2	        27	              O	               7.00
    100	              01	      	                 20180704	       3	        27	              O	               7.00
    100	              01	      	                 20180705	       4	        27	              O	               7.00
    100	              01	      	                 20180706	       5	        27	              O	               7.00
    100	              01	      	                 20180707	       6	        27	              N	               0.00
    100	              01	      	                20180708	       7	        27	              N	               0.00
    100	              01	      	                20180709	       1	        28	              O	               7.00
    100	              01	      	                20180710	       2	        28	              O	               7.00
    100	              01	      	                20180711	       3	        28	              O	               7.00

    REQUETE SQL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT     L.LCKTNUMERO, L.LCKTLIGNE, E.ECCTNOM, L.LCCTCODART, L.LCCTCOMART, L.LCCTLIB01, L.LCCJDELEXP, E.ECCJDERBL, DATEDIFF(day, L.LCCJDELEXP, E.ECCJDERBL) AS Diff
    FROM         dbo.LRECFOU AS L INNER JOIN
                          dbo.ERECFOU AS E ON E.ECKTNUMERO = L.LCKTNUMERO AND E.ECKTINDICE = L.LCKTPSF
    WHERE     (L.LCCTNATURE IN ('1', '2', '3')) AND (NOT (L.LCCTCODART LIKE 'Z%')) AND (NOT (L.LCKTNUMERO LIKE '3%'))

    Merci de m'aider à construire la requête.

    Cordialement

    Jérôme

  2. #2
    Invité
    Invité(e)
    Par défaut
    Et il est où le problème ?

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Avril 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2016
    Messages : 5
    Par défaut
    Bonjour 7gyY9w1ZY6ySRgPeaefZ,

    Mon problème est que je ne sais pas comment faire pour soustraire les jours non actifs dans ma requete SQL

    Cordialement

    Jérôme

  4. #4
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Bonjour,

    Il suffit de joindre la table (jointure externe) pour les lignes dont la date est comprise dans l'intervalle et en ne gardant que les lignes actives (condition a mettre dans la jointure également)
    il reste ensuite à compter le nombre de lignes, pour connaitre le nombre de jours actifs.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Avril 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2016
    Messages : 5
    Par défaut
    Merci aieeeuuuuu,

    Je pense avoir réussi grâce à ton raisonnement. Ci dessous le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT     DISTINCT L.LCKTNUMERO, L.LCKTLIGNE, E.ECCTNOM, L.LCCTCODART, L.LCCTCOMART, L.LCCTLIB01, L.LCCJDELEXP, E.ECCJDERBL, DATEDIFF(day, L.LCCJDELEXP, E.ECCJDERBL) AS Calcul, COUNT(C.CACTACTIF) as Jour_Non_Ouvre,
    DATEDIFF(day, L.LCCJDELEXP, E.ECCJDERBL) - COUNT(C.CACTACTIF) as Diff
    FROM         dbo.LRECFOU AS L 
    join dbo.ERECFOU AS E ON E.ECKTNUMERO = L.LCKTNUMERO AND E.ECKTINDICE = L.LCKTPSF
    left join CALEND C on  C.CAKJDATE between  L.LCCJDELEXP and E.ECCJDERBL  and C.CACTACTIF='N'               
    WHERE     (L.LCCTNATURE IN ('1', '2', '3')) AND (NOT (L.LCCTCODART LIKE 'Z%')) AND (NOT (L.LCKTNUMERO LIKE '3%')) and LCCJDELEXP>20180701 and L.LCCTSOLACE='S'
    group by L.LCKTNUMERO, L.LCKTLIGNE, E.ECCTNOM, L.LCCTCODART, L.LCCTCOMART, L.LCCTLIB01, L.LCCJDELEXP, E.ECCJDERBL

    Ainsi que le résultat:

    LCKTNUMERO LCKTLIGNE ECCTNOM LCCTCODART LCCTCOMART LCCTLIB01 LCCJDELEXP ECCJDERBL Calcul Jour_Non_Ouvre Diff
    000385 030 FISCHER ELEKTRONIK ACON01537 BARRETTE 10pts FEMELLE DROITE 20180705 20180709 4 2 2
    000385 070 FISCHER ELEKTRONIK ACON01538 BARRETTE 10pts MALE DROITE 20180705 20180709 4 2 2
    000385 100 FISCHER ELEKTRONIK ACON01539 BARRETTE 2pts FEMELLE DROITE 20180705 20180709 4 2 2
    000385 130 FISCHER ELEKTRONIK ACON01540 BARRETTE 2pts MALE DROITE 20180705 20180709 4 2 2
    001387 180 TTI France ACAP00774 COND. 10uF 10v 10% X5R 20180705 20180706 1 0 1
    001387 181 TTI France ACAP00774 COND. 10uF 10v 10% X5R 20180705 20180706 1 0 1
    001387 300 TTI France ACAP00972 1 COND. 33pF 3Kv CERAM 20180712 20180713 1 0 1
    001388 320 TTI France AELC00067 BOUTON POUSSOIR 20180706 20180709 3 2 1
    001427 050 ARROW AELC00867 1 RELAIS SPST G6RN 20180710 20180713 3 0 3
    001427 120 ARROW AELC00867 1 RELAIS SPST G6RN 20180705 20180709 4 2 2


    Pouvez vous me valider ma requete SQL

    Cordialement

    Jerome

Discussions similaires

  1. Réponses: 2
    Dernier message: 15/05/2017, 16h53
  2. Réponses: 14
    Dernier message: 11/09/2015, 16h12
  3. [WD17] calculer la différence entre les lignes d'une table
    Par cigalou84 dans le forum WinDev
    Réponses: 4
    Dernier message: 23/12/2013, 16h28
  4. [MySQL] Différence entre deux dates avec condition
    Par neGo33 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 16/02/2012, 14h47
  5. Comparaison entre deux dates dans une table
    Par Biskot75 dans le forum Access
    Réponses: 6
    Dernier message: 19/09/2006, 12h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo