Précédent   Forum des professionnels en informatique > Bases de données > Firebird > SQL
SQL Forum d'entraide sur le SQL pour Firebird
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 20/01/2011, 12h23   #1
Membre régulier
 
Inscription : mai 2008
Messages : 260
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 260
Points : 89
Points : 89
Par défaut Groupement par date

Bonjour,

Voici une table

dt_hr valeur
01/01/2010 10
01/01/2010 10h00 20
01/01/2010 11h00 30
...
01/01/2010 18h00 40
...
02/01/2010 12h00 10
...
03/01/2010 17h00 20

Dans le champ dt_hr j'ai tout un tas de données horodatées et j'ai les valeurs qui correspondent
Je voudrais faire une requete qui me donnerait la somme des valeurs sur une plage de date/heure (par exemple du 01/01/10 au 04/01/10 puis du 05/01/10 au 08/01/10 etc...
Un truc du genre :
Code :
SELECT sum(value) FROM matable WHERE dt_hr BETWEEN 01/01/2010 AND 31/01/2010 GROUP BY 'TOUS LES 3 JOURS'
J'espere que j'ai été clair

Merci
calou_33 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2011, 12h46   #2
Membre Expert
 
Avatar de Barbibulle
 
Frédéric
Inscription : octobre 2002
Messages : 1 722
Détails du profil
Informations personnelles :
Nom : Frédéric
Âge : 42

Informations forums :
Inscription : octobre 2002
Messages : 1 722
Points : 2 025
Points : 2 025
A première vu je ferai ca avec une PS.

Sinon en SQL pur je verrais bien avec l'aide d'un UDF.

Genre faire un regroupement par (( extraire le nombre de jour entre le debut de la période et dt_hr) Mod 3) (pour grouper par 3 jours)
Barbibulle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2011, 13h14   #3
Membre Expert
 
Avatar de Barbibulle
 
Frédéric
Inscription : octobre 2002
Messages : 1 722
Détails du profil
Informations personnelles :
Nom : Frédéric
Âge : 42

Informations forums :
Inscription : octobre 2002
Messages : 1 722
Points : 2 025
Points : 2 025
Si vous êtes sous fb>=2.1 il existe DATEDIFF qui pourrait faire l'affaire
Barbibulle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2011, 13h29   #4
Membre Expert
 
Avatar de Barbibulle
 
Frédéric
Inscription : octobre 2002
Messages : 1 722
Détails du profil
Informations personnelles :
Nom : Frédéric
Âge : 42

Informations forums :
Inscription : octobre 2002
Messages : 1 722
Points : 2 025
Points : 2 025
D'ailleurs je me suis trompé, ce n'est pas avec MOD qu'il faut faire puisque ca retourne le reste de la division et non la partie entière du résultat.

Donc la requete devrait être comme ci dessous :
Code :
1
2
3
4
SELECT (datediff(day, :DateDebut, cast(t.dt_hr AS date)) / 3), Min(cast(t.dt_hr AS date)) DateDebutGroupe, max(cast(t.dt_hr AS date)) AS  DateFinGroupe, sum(t.valeur) Total
FROM Matable t
WHERE t.dt_hr BETWEEN :DateDebut AND :DateFin
GROUP BY 1
Barbibulle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2011, 17h59   #5
Membre régulier
 
Inscription : mai 2008
Messages : 260
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 260
Points : 89
Points : 89
Merci Barbibulle je vais regarder ca
calou_33 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/01/2011, 16h36   #6
Membre régulier
 
Inscription : mai 2008
Messages : 260
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 260
Points : 89
Points : 89
Ca marche super bien
calou_33 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 00h02.


 
 
 
 
Partenaires

Hébergement Web