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 :

Soustraction Date time


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2009
    Messages : 5
    Par défaut Soustraction Date time
    Bonjour à tous,
    J'ai fais une extraction de données de montable et j'ai voulu ajouter une colonne (différence) qui me renvoit la différence en secondes entre la datetime du 2ème enregistrement et le 1er puis le 3ème et le 2ème .etc..

    Date | NS | différence
    ________________________________
    28/05/2009 03:25 | A | ??
    28/05/2009 06:24 | B | ??
    28/05/2009 06:33 | C | ??
    28/05/2009 06:37 | D | ??
    ma requete est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT     Date, NS
    FROM        matable
    WHERE     (date BETWEEN CONVERT(DATETIME, '2009-05-28 00:00:00', 102) AND CONVERT(DATETIME, '2009-05-28 10:00:00', 102)) 
    Comment je puisse changer ma requete afin de générer la 3ème colonne ?

    Merci d'avance

  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,

    La solution s'exprimera plus facilement sous SQL Server 2005 que sous SQL Server 2000.
    Quelle version de SQL Server utilisez-vous ?

    @++

  3. #3
    Membre à l'essai
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2009
    Messages : 5
    Par défaut
    j'utilise SQL server 2005

  4. #4
    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
    Essayez :

    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
    ;WITH
    	ORDRE (Date, Indice) AS
    	(
    		SELECT Date,
    				ROW_NUMBER() OVER(ORDER BY Date) AS Indice
    		FROM dbo.maTable
    	),
    	CTE (Date, Diff, Indice) AS
    	(
    			SELECT Date,
    					0 AS Diff,
    					1 AS Indice
    			FROM ORDRE
    			WHERE Indice = 1
    		UNION ALL
    			SELECT O.Date,
    					DATEDIFF(second, C.Date, O.Date) AS Diff,
    					C.Indice + 1 AS Indice
    			FROM ORDRE AS O
    			JOIN CTE AS C ON O.Indice = C.Indice
    	)
    UPDATE dbo.maTable
    SET [Difference] = C.Diff
    FROM dbo.maTable AS T
    JOIN CTE AS C ON T.Date = C.Date
    @++

  5. #5
    Membre à l'essai
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2009
    Messages : 5
    Par défaut
    je n'ai besoin que pour l'affichage des données, il ne faut pas mettre à jour la

    table.

    Est-ce que je peut l'utiliser ?

    Merci pour ton aide.

  6. #6
    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
    Bien sûr, il vous suffisait en fait de remplacer l'instruction UPDATE par un SELECT sur l'expression de table commune :

    Pour avoir l'ensembles des données de l'ensemble retourné par l'expression de table commune :

    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
    ;WITH
    	ORDRE (Date, Indice) AS
    	(
    		SELECT Date,
    				ROW_NUMBER() OVER(ORDER BY Date) AS Indice
    		FROM dbo.maTable
    	),
    	CTE (Date, Diff, Indice) AS
    	(
    			SELECT Date,
    					0 AS Diff,
    					1 AS Indice
    			FROM ORDRE
    			WHERE Indice = 1
    		UNION ALL
    			SELECT O.Date,
    					DATEDIFF(second, C.Date, O.Date) AS Diff,
    					C.Indice + 1 AS Indice
    			FROM ORDRE AS O
    			JOIN CTE AS C ON O.Indice = C.Indice
    	)
    SELECT *
    FROM CTE
    Et en plus propre :

    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
    ;WITH
    	ORDRE (Date, Indice) AS
    	(
    		SELECT Date,
    				ROW_NUMBER() OVER(ORDER BY Date) AS Indice
    		FROM dbo.maTable
    	),
    	CTE (Date, Diff, Indice) AS
    	(
    			SELECT Date,
    					0 AS Diff,
    					1 AS Indice
    			FROM ORDRE
    			WHERE Indice = 1
    		UNION ALL
    			SELECT O.Date,
    					DATEDIFF(second, C.Date, O.Date) AS Diff,
    					C.Indice + 1 AS Indice
    			FROM ORDRE AS O
    			JOIN CTE AS C ON O.Indice = C.Indice
    	)
    SELECT Date, Diff
    FROM CTE
    Voici deux pages pour vous guider sur l'utilisation des expressions de table commune :

    - l'article complet de SQLPro
    - quelques exemples d'utilisation dans mon blog

    @++

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

Discussions similaires

  1. [VB6] Soustraction Date & Time + Images dans les menus
    Par Jihnn dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 02/07/2006, 17h10
  2. ERROR: date/time
    Par MaitrePylos dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 17/08/2005, 10h15
  3. Date time picker
    Par Steph4 dans le forum MFC
    Réponses: 3
    Dernier message: 01/03/2005, 14h30
  4. comparer des champs date time
    Par HULK dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 25/01/2005, 14h02
  5. [DATE][TIME] Manque 1 heure
    Par cpr0 dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 01/07/2004, 16h43

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