Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 22/11/2010, 20h10   #1
Invité de passage
 
François
Inscription : décembre 2009
Messages : 5
Détails du profil
Informations personnelles :
Nom : François

Informations forums :
Inscription : décembre 2009
Messages : 5
Points : 2
Points : 2
Par défaut Extraire d'une table d'évènements DEBUT et FIN la durée de chaque évènement

Bonjour,

Je cherche à extraire à partir d'une table d'évènements DEBUT et FIN la durée de chaque évènement.

Table d'évènements
-------------------------------
ID Etat DateEvenement
3 FIN 2010-11-28
4 DEBUT 2010-11-27
3 DEBUT 2010-11-26
1 FIN 2010-10-26 ---+
2 FIN 2010-10-23 l 4 jours
1 DEBUT 2010-10-22 ---+

Extraction des durées
-------------------------------
ID Durée (jours)
3 2
1 4

J'ai commencé à faire la recherche de tous les évènements DEBUT et je cherche à rajouter le champ "Durée".
Mais je ne vois pas comment la créer...

Quelqu'un pourrait m'orienter sur la solution?

Merci à tous!
François
SamePlayer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2010, 20h14   #2
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 680
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 680
Points : 10 470
Points : 10 470
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Qu'avez-vous commencé à écrire comme requête ?
Quel est votre SGBD ?
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2010, 20h41   #3
Invité de passage
 
François
Inscription : décembre 2009
Messages : 5
Détails du profil
Informations personnelles :
Nom : François

Informations forums :
Inscription : décembre 2009
Messages : 5
Points : 2
Points : 2
Merci Waldar pour ta réponse.

Je suis actuellement sous Access 2007, voire SQL Server 2008 dans un proche avenir en fonction du volume de données...

Je suis arrivé à la requête suivante:
Code :
1
2
3
4
5
SELECT EvtDebut.ID, EvtDebut.Etat, EvtDebut.DateEvent AS DateDebut, EvtFin.DateEvent AS DateFin
FROM Events AS EvtDebut
   LEFT JOIN Events AS EvtFin ON EvtDebut.ID = EvtFin.ID
WHERE (((EvtDebut.Etat)="DEBUT")
AND EvtFin.DateEvent > EvtDebut.DateEvent);
SamePlayer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2010, 23h40   #4
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 680
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 680
Points : 10 470
Points : 10 470
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Comme ne vous intéressent que les résultats où on trouve DEBUT et FIN, vous n'avez pas besoin de faire une jointure externe.

Il faut en filtrer une sur DEBUT, une sur FIN (vous ne l'avez perçu que pour DEBUT, bizarre ) et effectuer la soustraction des dates qui donne un nombre de jours, tout simplement !

Vous n'êtes plus très loin, avec ces indications vous devriez trouver.
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2010, 12h39   #5
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 932
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 932
Points : 17 736
Points : 17 736
Sous MS SQL Server :

Code :
1
2
3
4
5
SELECT T1.ID, T1.DateEvenement AS Debut, T2.DateEvenement AS FIN,
       DATEDIFF(day, T1.DateEvenement, T2.DateEvenement) AS DureeJour
FROM   [TABLE d'évènements] AS T1
       INNER JOIN [Table d'évènements] AS T2
             ON T1.ID = T2.ID
A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 23/11/2010, 13h12   #6
Modérateur
 
Avatar de al1_24
 
Homme Alain
Ingénieur d'études décisionnel
Inscription : mai 2002
Messages : 4 436
Détails du profil
Informations personnelles :
Nom : Homme Alain
Âge : 51
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études décisionnel
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 4 436
Points : 7 481
Points : 7 481
Une petite correction au code de SQLpro, qui permettra d'avoir une seule ligne par ID et non quatre

Code :
1
2
3
4
5
6
7
8
9
10
11
SELECT  T1.ID
    ,   T1.DateEvent AS Debut
    ,   T2.DateEvent AS FIN
    ,   DATEDIFF(day, T1.DateEvent, T2.DateEvent) AS DureeJour
FROM    Events AS T1
    INNER JOIN 
        Events AS T2
        ON  T1.ID = T2.ID
WHERE   T1.Etat = 'DEBUT'
    AND T2.Etat = 'FIN'
;
__________________
Modérateur Langage SQL
Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
N'oubliez pas le bouton et pensez aux balises [code]
Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
al1_24 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2010, 14h46   #7
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 932
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 932
Points : 17 736
Points : 17 736
Oh, merde :!!!! faut dire que je donne un cours SQL avancé à Osys en même temps !!!!!

A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2010, 18h13   #8
Invité de passage
 
François
Inscription : décembre 2009
Messages : 5
Détails du profil
Informations personnelles :
Nom : François

Informations forums :
Inscription : décembre 2009
Messages : 5
Points : 2
Points : 2
Ca y est, j'ai fini par trouver mon dernier problème...
Certains évènements avaient plusieurs DEBUT et plusieurs FIN.
Et je devais garantir de bien associer un évènement DEBUT au premier évènement FIN trouvé aprés...

J'en suis arrivé à la reqête suivante:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
SELECT A.Module
	, A.Parameter
	, A.[Date/Time*] AS ActivatedTime
	, MAX(I.[Date/Time*]) AS UnactivatedTime
	, DATEDIFF('s', A.[Date/Time*], MAX(I.[Date/Time*])) AS ActivationTimeInSeconds
FROM EJournal AS A
	LEFT JOIN EJournal AS I 
		ON      (A.Module=I.Module)
			AND (A.Parameter=I.Parameter)
WHERE A.State='DEBUT'
	AND (I.State='FIN')
	AND A.ID>I.ID
GROUP BY A.Module
	, A.Parameter
	, A.State
	, A.ID
	, A.[Date/Time*]
ORDER BY A.ID
Merci pour votre aide!

Reste plus qu'à résoudre l'import d'un fichier texte avec des dates au format texte dans Access 2007 dans des champs date/time...
SamePlayer est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h04.


 
 
 
 
Partenaires

Hébergement Web