|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : juillet 2006 Messages : 37 ![]() |
Bonjour à tous!
Je ne suis pas un expert en requete sql mais je me débrouille. J'ai une bd sql qui a des enregistrements à chaques minutes.(environ 10000 lignes par semaine) J'ai besoin de faire un rapport le min moy max des valeurs à chaque semaine. Select Min(Champ1) as Min, Max(Champ1) as Max, Avg(Champ1) as Moy From BD WHERE DateAndTime > 'Date1' and DateAndTime < 'Date2' Cette requete me donne le min,moy et max de toute la période que j'ai selectionné (entre Date1 et Date2) ce qui me donne une ligne avec le champ Min, Max et Moy. Le problème est que je ne veux pas extraire les Min,Max et Moy pour la période entre Date1 et Date2 mais plutot les Min,Max et Moy de chaque jour. Donc, si je fais une requete entre le 1er et le 31 janvier, je devrais avoir 31 ligne (une pour chaque jour) et non une seul moyenne. Cette requete est-elle possible ou je dois créer une requete pour chaque jour ? Si je dois créer une requete par jours par programmation le rapport est très long à exécuter si je veux extraire une année complete par exemple. Merci! |
|
|
00
|
|
|
#2 | |||||
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 669 ![]() |
Bonjour,
Citation:
La seule chose que vous avez oublié pour ce faire dans votre requête, c'est la clause GROUP BY. Si vous êtes sous SQL Server 2008, vous pouvez écrire : Code :
Code :
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
|||||
|
00
|
|
|
#3 |
|
Invité de passage
![]() Inscription : juillet 2006 Messages : 37 ![]() |
J'ai souvant utilisé le GROUP BY mais quelle est la fonction de SELECT CAST(DateAndTime AS date) AS date_stamp ?
|
|
|
00
|
|
|
#4 |
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 669 ![]() |
Cela extrait la partie date des valeurs datetime de la colonne DateAndTime.
Faites les test suivant : @++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
|
00
|
|
|
#5 |
|
Invité de passage
![]() Inscription : juillet 2006 Messages : 37 ![]() |
Merci beaucoup !
Je vais pousser plus loin. est-il possible de faire la même chose mais pour chaque heures (24 lignes par jour) ?? |
|
|
00
|
|
|
#6 |
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 669 ![]() |
La réponse est toujours oui : il vous suffit d'ajouter dans la clause GROUP BY et dans le SELECT :
De cette façon vous aurez un groupement par jour et par heure. Si vous voulez voir globalement les valeurs par heure (c'set-à-dire sans la date), il suffit d'enlever CAST(DateAndTime AS date) partout dans la requête, et de conserver le groupement par heure @++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
|
00
|
|
|
#7 | ||
|
Invité de passage
![]() Inscription : juillet 2006 Messages : 37 ![]() |
Voici mon code qui fonctionne pour me donner une ligne par jour.
Code :
Si je veux une ligne pour chaque heure, tu me parle d'ajouter le code : , DATEPART(hour, DateAndTime) mais ne suis pas sur de l'endroi. Peux-tu m'aider ? Merci! |
||
|
|
00
|
|
|
#8 | ||||
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 669 ![]() |
Donc si tu recherches par heure et par jour :
Code :
Code :
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
||||
|
00
|
|
|
#9 | ||
|
Candidat au titre de Membre du Club
![]() Inscription : décembre 2010 Messages : 42 ![]() |
Bonjour,
je me permets de réagir à la suite de se sujet car je me trouve dans la même situation et j'ai un petit soucis de compréhension par rapport à ce que vous faites. J'ai une table dans laquelle est stockée une liste de bugs avec une heure bien précise (type datetime) et je souhaite pour un jour donné, récupérer le nombre de bugs par heure. Ma requête est donc la suivante : Code :
Msg*164, Niveau*15, État*1, Ligne*1 Chaque expression GROUP BY doit contenir au moins une colonne qui n'est pas une référence externe. Auriez vous une idée ? Merci par avance PS : Pour l'exemple là, j'ai donné une heure fixe DATEPART(hour, 20) car je ne sais pas comment faire pour que automatiquement SQL fasse la requête pour TOUTES les heures de la journée pour une date donnée. Merci par avance |
||
|
|
00
|
|
|
#10 | ||
|
Membre émérite
![]() Serge RUQUETConsultant informatique Inscription : août 2006 Messages : 669 ![]() |
tu peux l'écrire comme cela
Code :
__________________
Errare humanum est, perseverare diabolicum (Sénèque) |
||
|
|
00
|
|
|
#11 | ||||||
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 669 ![]() |
Bonjour,
L'erreur que vous obtenez est due à la mauvaise utilisation de la fonction DATEPART(). En outre la clause WHERE est horrible parce qu'elle n'est pas cherchable. En effet SQL Server maintient des statistiques sur les valeurs qui sont dans les colonnes et les index. Mais il ne peut pas maintenir de statistiques sur toutes les fonctions que l'on peut appliquer à une colonne. En conséquence, il doit à chaque fois lire toute la table ... ![]() Si vous écrivez ceci : Code :
Si vous êtes flemmard comme moi, vous pouvez écrire : Code :
Code :
Code :
EXEC dbo.usp_BugsParJourEtParHeure '20111102'
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
||||||
|
00
|
Copyright © 2000-2012 - www.developpez.com