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

MS SQL Server Discussion :

[Optimisation][Fonction]calcul du nombre de jours ...


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Avatar de m-mas
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2003
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2003
    Messages : 576
    Par défaut [Optimisation][Fonction]calcul du nombre de jours ...
    Bonjour,

    j'ai écrit une fonction qui vérifie si j'ai bien saisi quelque chose dans la base chaque jour entre une date de début et une date de fin.

    Exemple : entre le 1 janvier 2002 et le 31 décembre 2002, je veux savoir si il y a au moins une ligne comptable saisie dans la base.

    La fonction marche, mais si ma période de test est grande (1 année) la requête plante (normal puisque je fais des boucles sur la periode et je ramène des données, ...)

    un peu de code est mieux qu'un long discours, je vous laisse découvrir ma fonction en espérant que vous pouvez m'aider pour l'optimiser :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    CREATE FUNCTION NombreJours (@Client CHAR(8), 
         				  @DateDebut Datetime,
         				  @DateFin Datetime,
         				  @Seuil MONEY)  
    RETURNS INT 
     
    AS  
    BEGIN 
     
    IF @Client IS NULL
     RETURN NULL
     
    DECLARE @NbJours INT
    DECLARE @MaDate DATETIME
    DECLARE @SoldeMouvement MONEY
     
    SET @NbJours = 0
    SET @MaDate = @DateDebut
     
    '--initialisation comme paramètre
    @SoldeMouvement =1000
     
    '--je pense qu'il faut optimiser ici
    WHILE @MaDate <= @DateFin
    BEGIN
    '-- j'incrémente la date
     Select @MaDate = DateAdd(Day,1,@MaDate)
     
    SELECT @SoldeMouvement =(SUM(MONTANT_EURO_SIGNE) )+@SoldeMouvement 
    FROM MOUVEMENT MVT, ECRITURE ECR
    WHERE  ECR.ID = MVT.ID
    AND ECR.DATE_COMPTA<= @MaDate 
    AND MVT.COMPTE=@Client
     GROUP BY MONTANT_EURO_SIGNE
     
    IF @SoldeMouvement >= @Seuil
     SET @NbJours = @Nbjours + 1
     
    END
     
    RETURN @NbJours
     
    END
    Merci de votre aide !

  2. #2
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Par défaut
    Mais apparemment, tu comptes le nombre de jours au lieu d'une simple vérification.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    CREATE FUNCTION NombreJours (
                       @DateDebut Datetime, 
                       @DateFin Datetime)  
    RETURNS INT 
    AS  
    BEGIN 
     
    RETURN (SELECT COUNT(*)
                  FROM MOUVEMENT MVT, ECRITURE ECR 
                  WHERE  ECR.ID = MVT.ID 
                  AND ECR.DATE_COMPTA between @MaDateDebut and @DateFin
                  AND MVT.COMPTE=@Client  
    )

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

  3. #3
    Membre chevronné
    Avatar de m-mas
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2003
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2003
    Messages : 576
    Par défaut
    Merci Wolo pour ta réponse, mais il me faut cette condition pour incrémenter le nombre de jours :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IF @SoldeMouvement >= @Seuil

  4. #4
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Par défaut
    Quel nombre de jour ?
    A quoi ca vous sert ? (Il se peut que nous puissions l'avoir sans boucle !)

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

  5. #5
    Membre chevronné
    Avatar de m-mas
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2003
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2003
    Messages : 576
    Par défaut
    il s'agit d'un système d'informations comptable. Le but est d'obtenir le nombre de jours consécutifs dont le mouvement (montant) cumulé ne dépassant pas un seuil (entrée en paramètre) au cours d'une periode précise (entrée en paramètre)

    c'est pour cela que je récupère avant le mouvement (montant) que je lui ajoute à chaque fois le montant du jour suivant en testant si j'ai atteint le seuil

    je l'avoue c'est un peu compliqué tout ça !

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 998
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 998
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    toutes vos problématique se résumerait à de simples requêtes basiques si vous implémentiez une table des dates dans votre système d'information.
    A lire : http://sqlpro.developpez.com/cours/gestiontemps/
    Ainsi avec une telle table, votre procédure se résumerait à une seule requête du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT COUNT(*)
    FROM ...  
            RIGHT OUTER JOIN MA_TABLE_DATE ON  ...
    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  7. #7
    Membre chevronné
    Avatar de m-mas
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2003
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2003
    Messages : 576
    Par défaut
    Merci SQL Pro pour ces informations :yesup:

    Je vais voir avec le fonctionel !!

Discussions similaires

  1. Réponses: 6
    Dernier message: 06/06/2013, 15h04
  2. Réponses: 6
    Dernier message: 12/01/2008, 18h21
  3. [Dates] Calculer le nombre de jours dans le mois suivant...
    Par Life Hunter dans le forum Langage
    Réponses: 5
    Dernier message: 14/03/2006, 00h01
  4. Calculer le nombre de jours restants
    Par localhost dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 27/01/2006, 17h31
  5. calcule du nombre de jours entre 2 dates
    Par nazimb dans le forum ASP
    Réponses: 4
    Dernier message: 28/09/2004, 15h22

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