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 19/10/2011, 17h08   #1
Nouveau Membre du Club
 
Inscription : novembre 2007
Messages : 224
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 224
Points : 35
Points : 35
Par défaut Requête complexe et histoire de date

Salut à tous,

Je suis face à une requête pas gentille

Voilà la bête :

Code :
1
2
 
SELECT SUM(ma_valeur) AS maVal, date, FROM `MaTable` WHERE date BETWEEN '2011-08-01' AND '2011-08-08' AND ref_id ='227575' GROUP BY date ORDER BY date ASC
Je souhaiterais pouvoir ne sortir qu'une donnée par heure, à la limite la donnée max.

En gros sur une semaine je peux avoir beaucoup de données, et je souhaiterais limiter ma sortie à une donnée par heure, là j'ai plusieurs lignes par heure.

Merci à ceux qui m'auront déchiffré
Dev@lone est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/10/2011, 09h39   #2
Membre éclairé
 
Avatar de boussafi
 
Homme
Ingénieur développement logiciels
Inscription : septembre 2007
Messages : 342
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Algérie

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Industrie

Informations forums :
Inscription : septembre 2007
Messages : 342
Points : 397
Points : 397
Envoyer un message via Yahoo à boussafi Envoyer un message via Skype™ à boussafi
Tu peux commencer par cette requete sous SGBD Oracle.
Et si tu travaille sur un autre SGBD n'hésite pas de demmander

Code :
1
2
3
SELECT max(ma_valeur),to_char(la_date,'dd/mm/yyyy')la_date,max(to_char(la_date,'HH24'))heure 
FROM matable
GROUP BY to_char(la_date,'dd/mm/yyyy'),to_char(la_date,'HH24')
le principle est :
Tu decortiques la donnée date en date sous format , et heure sous format , puis tu fais un regroupement par date et heure en calculant le maximum de la valeur voulue
boussafi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/10/2011, 10h55   #3
Nouveau Membre du Club
 
Inscription : novembre 2007
Messages : 224
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 224
Points : 35
Points : 35
Oups, oui désolé je suis sous mysql.
Dev@lone est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/10/2011, 11h45   #4
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 029
Points : 18 327
Points : 18 327
Envoyer un message via MSN à CinePhil
Je viens de donner une réponse à une question équivalente dans cette discussion.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/10/2011, 12h25   #5
Nouveau Membre du Club
 
Inscription : novembre 2007
Messages : 224
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 224
Points : 35
Points : 35
@CinePhil :
J'ai testé
Code :
1
2
3
DATE(`date`) AS jour,
	EXTRACT(HOUR FROM `date`) AS heure,
	MIN(`date`) AS premier_timestamp
dans ma requête, rien à faire ça me sort toujours toutes les minutes de toutes les heures...

@boussafi :
Merci je vais essayer de faire la correspondance.
Dev@lone est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/10/2011, 13h55   #6
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 029
Points : 18 327
Points : 18 327
Envoyer un message via MSN à CinePhil
Tu peux nous montrer ta requête complète STP ?
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/10/2011, 14h28   #7
Nouveau Membre du Club
 
Inscription : novembre 2007
Messages : 224
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 224
Points : 35
Points : 35
Code :
1
2
3
4
5
6
7
8
9
10
SELECT 
SUM(ma_valeur) AS maVal, 
DATE(`date`) AS jour,
EXTRACT(HOUR FROM `date`) AS heure,
MIN(`date`) AS premier_timestamp, 
FROM `MaTable` 
WHERE date BETWEEN '2011-08-01' AND '2011-08-08' 
AND ref_id ='227575' 
GROUP BY date 
ORDER BY date ASC
Dev@lone est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/10/2011, 14h48   #8
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 029
Points : 18 327
Points : 18 327
Envoyer un message via MSN à CinePhil
Évidemment ! Tu fais GROUP BY date donc tu as toutes les dates ! Et comme apparemment tes dates sont de type timestamp ou datetime, tu as donc toutes les minutes !

Regarde bien le GROUP BY de ma requête sur l'autre discussion. D'une manière générale, toutes les colonnes du SELECT qui ne font pas l'objet d'une fonction d'agrégation (SUM, MIN, MAX, COUNT, AVG) doivent figurer dans le GROUP BY. Un autre SGBD que le mauvais MySQL aurait refusé cette requête !

Ta requête devrait être celle-ci :
Code :
1
2
3
4
5
6
7
8
9
10
SELECT 
	SUM(ma_valeur) AS maVal, 
	DATE(`date`) AS jour,
	EXTRACT(HOUR FROM `date`) AS heure,
	MIN(`date`) AS premier_timestamp, 
FROM MaTable 
WHERE `date` BETWEEN '2011-08-01' AND '2011-08-08' 
	AND ref_id = 227575 
GROUP BY DATE(`date`), EXTRACT(HOUR FROM `date`)
ORDER BY `date` ASC
Citation:
Je souhaiterais pouvoir ne sortir qu'une donnée par heure, à la limite la donnée max.
Ce besoin exprimé ne correspond par contre pas trop à ta requête qui te donnera la somme des valeurs et le timestamp mini de chaque heure pour le ref_id 227575 et entre le 1 et le 8 août 2011.

Au passage...
1) "DATE" est un mot réservé du langage SQL et tu ne devrais pas nommer une colonne ainsi.
2) Si "ref_id" est, comme il se doit, de type entier, inutile de mettre la valeur souhaitée entre apostrophes.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/10/2011, 18h52   #9
Nouveau Membre du Club
 
Inscription : novembre 2007
Messages : 224
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 224
Points : 35
Points : 35
Merci pour ta proposition, en effet ça semble se rapprocher de ce que je cherche, mais c'est moi qui m’emmêle les pinceaux avec les SUM...
Dev@lone est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/10/2011, 18h09   #10
Nouveau Membre du Club
 
Inscription : novembre 2007
Messages : 224
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 224
Points : 35
Points : 35
C'est parfait c'est finalement exactement ce qu'il me fallait, merci beaucoup
Dev@lone est actuellement 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 16h16.


 
 
 
 
Partenaires

Hébergement Web