Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server
MS SQL-Server Forum Microsoft SQL-Server. Avant de poster -> FAQ SQL-Server, Tutoriels SQL-Server
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 30/12/2010, 13h31   #1
Invité de passage
 
Inscription : juin 2008
Messages : 2
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 2
Points : 1
Points : 1
Par défaut Statistiques par tranche horaire

Bonjour,
Après une recherche infrutueuse, je viens exposer mon problème.
J'ai une table enregistrant l'arrivée et le départ de participants à des activités.
La table contient une dizaine de champs dont :
- DATEIN date au format "dd/mm/yyyy"
- HOURIN heure d'arrivée "HH:MM"
- HOUROUT heure de sortie "HH:MM".

Je dois sortir des statistiques d'occupation par tranche de 15 minutes.
Cela signifie qu'un participant arrivé à 09:45 et sorti à 11:00 doit être repris dans les 5 tranches horaire (09:46>10:00 - 10:01>10:15 - 10:16>10:30 - 10:31>10:45 - 10:46>11:00).

Je pensais avoir trouvé mon bonheur dans cette discussion malheureusement c'est pour une base Oracle et je ne sais pas traduire le code pour SQL.

Merci d'avance pour votre aide.
sysdile est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/12/2010, 14h22   #2
Expert Confirmé
 
Avatar de 7gyY9w1ZY6ySRgPeaefZ
 
Homme
dba
Inscription : juillet 2007
Messages : 2 520
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : dba

Informations forums :
Inscription : juillet 2007
Messages : 2 520
Points : 3 967
Points : 3 967
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
CREATE FUNCTION [dbo].[Arrondi_Heure]
(
	@Heure Datetime = 0, @Precision_Min Int = 15
)
RETURNS DATETIME
AS
BEGIN
	DECLARE @Heure_Number Float ,
			@Heure_Number_Arrondi Float,
			@Jour_Float_Arrondi Float,
			@Heure_Retour_Float Float
 
		SET @Jour_Float_Arrondi = floor(cast(@Heure AS float))
		SET @Heure_Number = DATEDIFF(minute, cast(@Jour_Float_Arrondi AS datetime), @Heure )
		SET @Heure_Number_Arrondi = FLOOR ( @Heure_Number / @Precision_Min ) * @Precision_Min
		SET @Heure_Retour_Float = @Jour_Float_Arrondi + @Heure_Number_Arrondi / 1440.0
 
	RETURN cast(@Heure_Retour_Float AS datetime)
 
END
Je t'offre une fonction qui permet d'arrondir suivant une heure donnée avec une précision donnée.
Par contre, ça utilise des dates au format datetime, ça ne prend pas en charge les formats exotiques qui compliquent l'existence.
__________________
les règles du forum - mode d'emploi du forum
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs.
(Rappel : "ça ne marche pas" n'est pas un message d'erreur)
JE NE RÉPONDS PAS aux questions techniques par message privé.
Écrire en français sur un forum est une marque minimale de respect.
7gyY9w1ZY6ySRgPeaefZ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/12/2010, 16h18   #3
Invité de passage
 
Inscription : juin 2008
Messages : 2
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 2
Points : 1
Points : 1
Merci pour cette fonction qui je l'avoue ne pas pas résoudre mon problème à 100% puisque je n'ai pas de format datetime sur les champs !
Par contre cela m'a mis sur la voie pour solutionner mon problème.
Comme je souhaitais avoir pour une date donnée le nombre de participants par plage horaire, j'ai créé une table avec les plages souhaitées et je compare les HOURIN - HOUROUT avec les valeurs de cette table.
Cela tourne à merveille avec un petit bémol : je suis contraint pour que cela tourne tous les jours d'avoir des plages qui certains jours ne sont jamais utilisées.
Mais j'ai une solution avec cette requête :
SELECT
h.min_time,
h.max_time,
k.datein,
count(*) AS nb_lignes
FROM SM_HOURSRANGS h
JOIN SM_PARTICIPANTS k
ON k.hourin <= h.max_time AND k.hourout > h.min_time
WHERE k.datein = '29/12/2010'
GROUP BY k.datein, h.min_time, h.max_time
ORDER BY k.datein, h.min_time

C'est peut-être une voie détournée pour solutionner mon besoin ...
Si quelqu'un a une autre solution, je suis ouvert !
sysdile est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/12/2010, 16h30   #4
Expert Confirmé
 
Avatar de 7gyY9w1ZY6ySRgPeaefZ
 
Homme
dba
Inscription : juillet 2007
Messages : 2 520
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : dba

Informations forums :
Inscription : juillet 2007
Messages : 2 520
Points : 3 967
Points : 3 967
Citation:
Envoyé par sysdile Voir le message
Merci pour cette fonction qui je l'avoue ne pas pas résoudre mon problème à 100% puisque je n'ai pas de format datetime sur les champs !
C'est le problème de vouloir réinventer la roue.
Il faut vivre avec ensuite!
Bon courage.
__________________
les règles du forum - mode d'emploi du forum
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs.
(Rappel : "ça ne marche pas" n'est pas un message d'erreur)
JE NE RÉPONDS PAS aux questions techniques par message privé.
Écrire en français sur un forum est une marque minimale de respect.
7gyY9w1ZY6ySRgPeaefZ 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 15h40.


 
 
 
 
Partenaires

Hébergement Web