Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Développement
Développement Forum d'entraide sur le Transact-SQL, le CLR, les procédures stockées, les triggers, les requêtes 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 15/04/2011, 16h37   #1
Invité de passage
 
Homme Nicolas
Inscription : mars 2011
Messages : 22
Détails du profil
Informations personnelles :
Nom : Homme Nicolas
Localisation : France

Informations forums :
Inscription : mars 2011
Messages : 22
Points : 4
Points : 4
Par défaut Probléme d'Extraction d'un historique par heure

Bonjour,
je voudrais révupérer les valeurs historisé dans une table, la variable est un Analog.

mon code est le suivant :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SELECT 
 
DATEPART(hour,DateTime) AS hour
,datetime
,Tagname
,value AS VALEUR
 
FROM RUNTIME.dbo.AnalogHistory 
 
WHERE 
DATEPART(year,DateTime) = 2011
 
AND(TagName = 'chaudiere 10b pression vapeur')
 
GROUP BY datetime,value,tagname
Mais je n'arrive pas à avoir le résultat souhaité :

DATE DATETIME TAGNAME VALEUR
15 2011-04-15 15:45:05.067 chaudiere 10b pression vapeur 8
15 2011-04-15 15:45:41.430 chaudiere 10b pression vapeur 8
15 2011-04-15 15:46:17.793 chaudiere 10b pression vapeur 8
15 2011-04-15 15:46:54.157 chaudiere 10b pression vapeur 8
15 2011-04-15 15:47:30.520 chaudiere 10b pression vapeur 8
15 2011-04-15 15:48:06.887 chaudiere 10b pression vapeur 8
15 2011-04-15 15:48:43.250 chaudiere 10b pression vapeur 8
15 2011-04-15 15:49:19.613 chaudiere 10b pression vapeur 8
15 2011-04-15 15:49:55.977 chaudiere 10b pression vapeur 8
15 2011-04-15 15:50:32.340 chaudiere 10b pression vapeur 8
15 2011-04-15 15:51:08.703 chaudiere 10b pression vapeur 8
15 2011-04-15 15:51:45.067 chaudiere 10b pression vapeur 8
15 2011-04-15 15:52:21.430 chaudiere 10b pression vapeur 8
15 2011-04-15 15:52:57.793 chaudiere 10b pression vapeur 9
15 2011-04-15 15:53:34.157 chaudiere 10b pression vapeur 8
15 2011-04-15 15:54:10.520 chaudiere 10b pression vapeur 8
15 2011-04-15 15:54:46.887 chaudiere 10b pression vapeur 8
15 2011-04-15 15:55:23.250 chaudiere 10b pression vapeur 8
15 2011-04-15 15:55:59.613 chaudiere 10b pression vapeur 8
15 2011-04-15 15:56:35.977 chaudiere 10b pression vapeur 8
15 2011-04-15 15:57:12.340 chaudiere 10b pression vapeur 8
15 2011-04-15 15:57:48.703 chaudiere 10b pression vapeur 8
15 2011-04-15 15:58:25.067 chaudiere 10b pression vapeur 8
15 2011-04-15 15:59:01.430 chaudiere 10b pression vapeur 8
15 2011-04-15 15:59:37.793 chaudiere 10b pression vapeur 8
16 2011-04-15 16:00:14.157 chaudiere 10b pression vapeur 8
16 2011-04-15 16:00:50.520 chaudiere 10b pression vapeur 8
16 2011-04-15 16:01:26.887 chaudiere 10b pression vapeur 8
16 2011-04-15 16:02:03.250 chaudiere 10b pression vapeur 8
...

Pourquoi le GroupBy ne rassemble pas les valeurs par heures?
J'aimerais obtenir la date du jour avec les 24 heures renseignées une seule fois.

Merci,
Nicolas.
niko0083 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/04/2011, 16h50   #2
Responsable SQL Server

 
Avatar de mikedavem
 
Homme David BARBARIN
Expert SQL Server
Inscription : août 2005
Messages : 3 723
Détails du profil
Informations personnelles :
Nom : Homme David BARBARIN
Localisation : France, Haute Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Expert SQL Server
Secteur : Conseil

Informations forums :
Inscription : août 2005
Messages : 3 723
Points : 6 844
Points : 6 844
Bonjour,

Code :
1
2
3
4
5
6
7
8
SELECT  
 DATEPART(hour,DateTime) AS hour
 ,Tagname
 ,value AS VALEUR
FROM RUNTIME.dbo.AnalogHistory 
WHERE DATEPART(year,DateTime) = 2011
 AND(TagName = 'chaudiere 10b pression vapeur')
GROUP BY DATEPART(hour,DateTime),tagname,value
++
mikedavem est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/04/2011, 08h48   #3
Invité de passage
 
Homme Nicolas
Inscription : mars 2011
Messages : 22
Détails du profil
Informations personnelles :
Nom : Homme Nicolas
Localisation : France

Informations forums :
Inscription : mars 2011
Messages : 22
Points : 4
Points : 4
Merci, mais cela ne fonctionne pas comme je l'aurais souhaité :
La valeur de variable varie entre 7 et 10 du coup si j'exécute cette requete le résultat renvoyé est :

Hour tagname valeur
7 chaudiere 10b pression vapeur 8
8 chaudiere 10b pression vapeur 7
8 chaudiere 10b pression vapeur 8
8 chaudiere 10b pression vapeur 9

si la variable prend les 3 valeurs dans l'heure cela affiche les trois valeurs et l'historique remonte seulement au 3 derniers jours...
Or j'aimerais obtenir la valeur instanté a chaque heure depuis janvier 2011!

Une autre idée?

Nicolas.
niko0083 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/04/2011, 15h31   #4
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
Bonjour,

Citation:
Or j'aimerais obtenir la valeur instanté a chaque heure depuis janvier 2011!
Laquelle ? si votre variable peut varier au cours d'une heure, quelle valeur voulez vous prendre ?

Je vais supposer qu'on prend le max :

Code SQL :
1
2
3
4
5
6
7
8
9
 
SELECT  
 DATEADD(HOUR, DATEDIFF(HOUR, 0,[DateTime]), 0) AS heure
 ,Tagname
 ,MAX(value) AS VALEUR
FROM RUNTIME.dbo.AnalogHistory 
WHERE [DateTime] > '2011-01-01'
 AND(TagName = 'chaudiere 10b pression vapeur')
GROUP BY DATEADD(HOUR, DATEDIFF(HOUR, 0,[DateTime]), 0) ,tagname
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/04/2011, 15h53   #5
Invité de passage
 
Homme Nicolas
Inscription : mars 2011
Messages : 22
Détails du profil
Informations personnelles :
Nom : Homme Nicolas
Localisation : France

Informations forums :
Inscription : mars 2011
Messages : 22
Points : 4
Points : 4
Justement, ce n'est pas le max que je veux; il me faudrait la valeur à chaque heure fixe (8h00, 9h00 ...) sur les 24H. Cela serait trop simple sinon ^^
niko0083 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/04/2011, 15h59   #6
Invité de passage
 
Homme Nicolas
Inscription : mars 2011
Messages : 22
Détails du profil
Informations personnelles :
Nom : Homme Nicolas
Localisation : France

Informations forums :
Inscription : mars 2011
Messages : 22
Points : 4
Points : 4
Citation:
Envoyé par aieeeuuuuu Voir le message
Bonjour,

Code SQL :
1
2
3
4
5
6
7
8
9
 
SELECT  
 DATEADD(HOUR, DATEDIFF(HOUR, 0,[DateTime]), 0) AS heure
 ,Tagname
 ,MAX(value) AS VALEUR
FROM RUNTIME.dbo.AnalogHistory 
WHERE [DateTime] > '2011-01-01'
 AND(TagName = 'chaudiere 10b pression vapeur')
GROUP BY DATEADD(HOUR, DATEDIFF(HOUR, 0,[DateTime]), 0) ,tagname
Votre code marche par jour, mais la réponse donne la valeur à 0H:0M : extrait :

2011-01-02 01:00:00.000 chaudiere 10b pression vapeur 0
2011-01-03 03:00:00.000 chaudiere 10b pression vapeur 8
2011-01-04 05:00:00.000 chaudiere 10b pression vapeur 8
2011-01-05 07:00:00.000 chaudiere 10b pression vapeur 7
2011-01-06 09:00:00.000 chaudiere 10b pression vapeur 8
2011-01-07 10:00:00.000 chaudiere 10b pression vapeur 8
2011-01-08 12:00:00.000 chaudiere 10b pression vapeur 0
2011-01-09 14:00:00.000 chaudiere 10b pression vapeur 0
2011-01-10 16:00:00.000 chaudiere 10b pression vapeur 8
2011-01-11 18:00:00.000 chaudiere 10b pression vapeur 8
2011-01-12 20:00:00.000 chaudiere 10b pression vapeur 8
2011-01-13 21:00:00.000 chaudiere 10b pression vapeur 8

mais merci quand même.
niko0083 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/04/2011, 16h42   #7
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
Citation:
me faudrais la valeur à chaque heure fixe (8h00, 9h00 ...)
Dans votre jeu de données, il n'y a aucune valeur a heure fixe...

Mettez un exemple de résultat attendu à partir de votre jeu de données, ça sera plus clair.
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/04/2011, 10h20   #8
Invité de passage
 
Homme Nicolas
Inscription : mars 2011
Messages : 22
Détails du profil
Informations personnelles :
Nom : Homme Nicolas
Localisation : France

Informations forums :
Inscription : mars 2011
Messages : 22
Points : 4
Points : 4
Cette table enregistre les données d'un capteur de pression, mais pas réguliérement.

Je voudrais avoir la valeur instantanée par jour et par heure pour voir l'évolution de cette variable.

Concrettement le résultat idéale serait :

Jour Heure Valeur
19 8h00 8
19 9h00 8
19 10h00 7
19 11h00 7
19 21h00 6
....
niko0083 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/04/2011, 10h27   #9
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
reprennons !

Citation:
valeur instantanée
Une valeur instantanée, c'est la valeur issue d'une mesure prise à un instant T

Vous voulez la mesure instantanée a 8:00:00.000 ? mais si votre table ne contient aucune mesure à cette heure précise ?

Si par exemple vous avez :
7:59:30 --> 7
8:00:30 --> 8
8:00:01 --> 9

Que voulez vous pour 8:00:00 ?
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/04/2011, 14h06   #10
Invité de passage
 
Homme Nicolas
Inscription : mars 2011
Messages : 22
Détails du profil
Informations personnelles :
Nom : Homme Nicolas
Localisation : France

Informations forums :
Inscription : mars 2011
Messages : 22
Points : 4
Points : 4
Citation:
Envoyé par aieeeuuuuu Voir le message
reprennons !

Que voulez vous pour 8:00:00 ?
Il y a une chose que je ne comprends pas :

J'utilise un logicel wonderware qui s'appel trend et qui me permet de lire ces données sous forme de courbes, mais celle ci sont continues. Cela veu dire que Trend fait une linéarisation des points qui sont historisés??? j'ai donc des valeurs sur toute mon échelle de temps.

J'aurais besoins de ses points pour refaire la courbe sous Excel; c'est donc pour cela qu'il me faut une échelle fixe (demie heure, heure...) mais commes mes données ne sont pas historisées à prériode fixe comme vous l'avez souligné je ne sais pas comment faire simplement.
niko0083 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/04/2011, 14h29   #11
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 953
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 953
Points : 17 773
Points : 17 773
Il faut que vous ajoutiez à votre base une table de chronodatage au pas horaire voulu (ici 1h) puis que vous fassiez une jointure externe.

Pour pouvoir vous aider plus avant, respectez la charte de postage
http://www.developpez.net/forums/d96...er/#post637770

1) postez le DDL de votre table (CREATE TABLE...)
2) postez un jeu d'essais sous forme INSERT INTO ...
3) postez la réponse attendue sous forme de lignes.

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 19/04/2011, 14h36   #12
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
Citation:
je ne sais pas comment faire simplement
C'est à vous de définir votre besoin. Mais si vous voulez faire simplement, une moyenne me semble un bon début ! (en reprenant la requête que je vous ai donnée, et en remplaçant MAX(value) par AVG(value) )

Par contre je n'ai pas compris ce que vous vouliez dire par
Citation:
Votre code marche par jour, mais la réponse donne la valeur à 0H:0M : extrait :
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/04/2011, 16h17   #13
Invité de passage
 
Homme Nicolas
Inscription : mars 2011
Messages : 22
Détails du profil
Informations personnelles :
Nom : Homme Nicolas
Localisation : France

Informations forums :
Inscription : mars 2011
Messages : 22
Points : 4
Points : 4
Désolé, j'avais fais une mauvaise interprétation. Le résultat de la requêtte étant limité à 100 lignes je n'avais pas vu toutes les valeurs.

Votre solution marche bien, je vais aussi explorer la solution envoyé par SQLpro.

Merci à vous une fois de plus à toutes les personnes animant ce forum!!!
niko0083 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h18.


 
 
 
 
Partenaires

Hébergement Web