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 :

Soustraction des données de deux lignes comprises entre deux dates [2012]


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    ETUDE
    Inscrit en
    Septembre 2016
    Messages
    360
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : ETUDE
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2016
    Messages : 360
    Par défaut Soustraction des données de deux lignes comprises entre deux dates
    Salut à tous je revient avec un nouveau problème je souhaite faire la soustraction des données comprise entre deux dates dans a table [CONSOMMATION]
    Nom : Capture7.PNG
Affichages : 1012
Taille : 5,7 Ko
    pour cela j'écrit la requette suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     SELECT (MAX(Date_Heure)-MIN(Date_Heure)) AS DATE_FIN FROM Relevé_Compteur_Energie
    mais sa ne marche j’obtiens une erreur 'Msg 8117, Level 16, State 1, Line 1
    Le type de données de l'opérande date n'est pas valide pour l'opérateur add.
    ' Comment faire pour corrigé se problème en sachant que les dates peuvent prise aléatoirement?

  2. #2
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Bonjour,

    Essayez avec DATEDIFF : vous voulez calculer une différence entre deux dates, donc il faut donner l'unité dans laquelle vous souhaitez obtenir cette différence : en jour, en années, en mois, ...

    les fonctions MIN() et MAX() ne retournent pas un résultat au hasard, à moins qu'on les fasse travailler sur des données générées pseudo-aléatoirement.

    @++

  3. #3
    Membre éclairé
    Homme Profil pro
    ETUDE
    Inscrit en
    Septembre 2016
    Messages
    360
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : ETUDE
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2016
    Messages : 360
    Par défaut
    Merci pour ta reponse elsuket
    je voudrais qu'a chaque fois ou je remplis deux date pouvoir avoir la différence entre deux dates
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT *  FROM Relevé_Compteur_Energie WHERE [Date_Heure]='' 
    UNION ALL SELECT * FROM Relevé_Compteur_Energie WHERE [Date_Heure]=''

  4. #4
    Membre éclairé
    Homme Profil pro
    ETUDE
    Inscrit en
    Septembre 2016
    Messages
    360
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : ETUDE
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2016
    Messages : 360
    Par défaut
    Bonjour à tous j'ai écrit la requette suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT DATEDIFF(day, '2017-03-17', '2017-03-20') FROM
    (SELECT * FROM [Relevé_Compteur_Energie] WHERE [Date_Heure]= '2017-03-17'
    UNION ALL
    SELECT * FROM [Relevé_Compteur_Energie] WHERE [Date_Heure]= '2017-03-20') as scr
    Mais j'obtient Plutot le nombre de jour
    Nom : CaptureV.PNG
Affichages : 956
Taille : 2,6 Ko

  5. #5
    Membre éclairé
    Homme Profil pro
    ETUDE
    Inscrit en
    Septembre 2016
    Messages
    360
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : ETUDE
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2016
    Messages : 360
    Par défaut
    Cette requette
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT		RCE_1.Date_Heure AS date_debut
    		, RCE_2.Date_Heure AS date_fin
    		, RCE_2.[T1(12KW)] - RCE_1.[T1(12KW)] AS [T1(12KW)]
    		, RCE_2.[T2(12KW)] - RCE_1.[T2(12KW)] AS [T2(12KW)]
    		, RCE_2.[T1(13KVAR)] - RCE_1.[T1(13KVAR)] AS [T1(13KVAR)]
    		, RCE_2.[T2(13KVAR)] - RCE_1.[T2(13KVAR)] AS [T2(13KVAR)]
    FROM		dbo.Relevé_Compteur_Energie AS RCE_1
    INNER JOIN	dbo.Relevé_Compteur_Energie AS RCE_2
    			ON RCE_1.Date_Heure = DATEADD(day, -1, RCE_2.Date_Heure)
    Fonctionne bien si je fait les relevé du compteur tous les jour mais si on saute une seule journée sans remplir, le jour suivant si on rempli le calcule ne sera plus effectuer or mon objectif est de faire se calcul même si on saute quelque jour avant de faire à nouveau les relevé du compteur d'énergie

  6. #6
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Il faut récupérer "la plus grande date strictement inférieure à la date de la ligne en cours" :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SELECT		RCE_1.Date_Heure AS date_debut
    		, RCE_2.Date_Heure AS date_fin
    		, RCE_2.[T1(12KW)] - RCE_1.[T1(12KW)] AS [T1(12KW)]
    		, RCE_2.[T2(12KW)] - RCE_1.[T2(12KW)] AS [T2(12KW)]
    		, RCE_2.[T1(13KVAR)] - RCE_1.[T1(13KVAR)] AS [T1(13KVAR)]
    		, RCE_2.[T2(13KVAR)] - RCE_1.[T2(13KVAR)] AS [T2(13KVAR)]
    FROM		dbo.Relevé_Compteur_Energie AS RCE_1
    INNER JOIN	dbo.Relevé_Compteur_Energie AS RCE_2
    			ON RCE_2.Date_Heure = (select max(rce3.date_heure) from dbo.relevé_compteur_energie rce3 where rce3.date_heure < rce1.date_heure)

    On peut aussi se baser sur la fonction de partitionnement lead si je ne m'abuse, mais j'ai pas la syntaxe ne tête ^^

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Lire les lignes présentes entre deux lignes données
    Par rattlesnake dans le forum C++
    Réponses: 5
    Dernier message: 23/09/2016, 12h49
  2. extraire ligne ou cellule est comprise entre deux dates
    Par tiktak28 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 10/11/2011, 20h14
  3. Réponses: 2
    Dernier message: 12/01/2011, 13h05
  4. Réponses: 1
    Dernier message: 02/07/2010, 15h25
  5. Réponses: 5
    Dernier message: 01/12/2008, 14h20

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