OVH Cloud OVH Cloud

Jours de la semaine

4 réponses
Avatar
sonia
Bonjour,

J'aimerais savoir si je peux faire une requette qui me donne le jour
de la semaine
sachant que j'ai une date sous forme aaaa/mm/jj hh:mm:ss

En fait je dois faire des statistiques sur mes donn=E9e
selon les jours de la semaine et du weed end

Je n'ai aucune id=E9e de comment commencer

Si vous pouvez m'aider =E7a serait gentil

Merci d'avance

4 réponses

Avatar
sonia
http://www.informit.com/articles/article.asp?p$041&rl=1

On 23 fév, 16:39, "sonia" wrote:
Bonjour,

J'aimerais savoir si je peux faire une requette qui me donne le jour
de la semaine
sachant que j'ai une date sous forme aaaa/mm/jj hh:mm:ss

En fait je dois faire des statistiques sur mes donnée
selon les jours de la semaine et du weed end

Je n'ai aucune idée de comment commencer

Si vous pouvez m'aider ça serait gentil

Merci d'avance


Avatar
Jean-Nicolas BERGER
Je vous invite à consulter l'aide en ligne de la fonction DATEPART, en
consultant plus précisément DATEPART(WEKKDAY, Ma_Date).
Après celà, un joli GROUP BY, et le tour est joué.
Cordialement.
JN BERGER


"sonia" a écrit dans le message de news:

Bonjour,

J'aimerais savoir si je peux faire une requette qui me donne le jour
de la semaine
sachant que j'ai une date sous forme aaaa/mm/jj hh:mm:ss

En fait je dois faire des statistiques sur mes donnée
selon les jours de la semaine et du weed end

Je n'ai aucune idée de comment commencer

Si vous pouvez m'aider ça serait gentil

Merci d'avance
Avatar
Fred BROUARD
sonia a écrit :
Bonjour,

J'aimerais savoir si je peux faire une requette qui me donne le jour
de la semaine
sachant que j'ai une date sous forme aaaa/mm/jj hh:mm:ss

En fait je dois faire des statistiques sur mes donnée
selon les jours de la semaine et du weed end



Dans ce cas il est indispensable que votre base intègre une table des
dates. Sans cela le risque est important que vos statistiques soient
fausses. En effet si à un jour donné vous n'avez aucune entrée dans
votre table, ce jour ne sera pas comptabilisé.

Démonstration : Soit la table T_SAV d'un SAV qui admet des appareils à
réparer de la forme suivante :

CREATE TABLE T_SAV
(SAV_ID INT NOT NULL PRIMARY KEY,
SAV_APPAREIL VARCHAR(16),
SAV_DATE DATETIME)

Avec les données suivantes :

SET DATEFORMAT YMD
INSERT INTO T_SAV VALUES (1, 'TV', '2007-02-19')
INSERT INTO T_SAV VALUES (2, 'Radio', '2007-02-19')
INSERT INTO T_SAV VALUES (3, 'Four', '2007-02-20')
INSERT INTO T_SAV VALUES (4, 'TV', '2007-02-20')
INSERT INTO T_SAV VALUES (5, 'Frigo', '2007-02-20')
INSERT INTO T_SAV VALUES (6, 'Radio', '2007-02-22')
INSERT INTO T_SAV VALUES (7, 'TV', '2007-02-22')
INSERT INTO T_SAV VALUES (8, 'PC', '2007-02-22')
INSERT INTO T_SAV VALUES (9, 'Four', '2007-02-23')
INSERT INTO T_SAV VALUES (10,'TV', '2007-02-23')

Calculez le nombre moyen d'appareils traités par jour et pour la semaine
du 19 au 23 février.

La requête ci-dessous :

SELECT CAST(COUNT(*) AS FLOAT)
/ CAST(COUNT(DISTINCT SAV_DATE) AS FLOAT)
AS MOYENNE_PAR_JOUR
FROM T_SAV
WHERE SAV_DATE BETWEEN '2007-02-19' AND '2007-02-23'

MOYENNE_PAR_JOUR
-----------------------------------------------------
2.5

donne un résultat erroné... En effet il y a un jour dans lequel aucun
appareil n'a été pris en SAV.

Le seul moyen de donner un sens à cette requête est de projeter la table
T_SAV sur une table "calendrier" comportant _toutes_ les dates.

Exemple :

CREATE TABLE T_DAT
(DAT_JOUR DATETIME NOT NULL PRIMARY KEY)

INSERT INTO T_DAT VALUES ('2007-02-18')
INSERT INTO T_DAT VALUES ('2007-02-19')
INSERT INTO T_DAT VALUES ('2007-02-20')
INSERT INTO T_DAT VALUES ('2007-02-21')
INSERT INTO T_DAT VALUES ('2007-02-22')
INSERT INTO T_DAT VALUES ('2007-02-23')
INSERT INTO T_DAT VALUES ('2007-02-24')

Dès lors la requête s'écrit :

SELECT CAST(COUNT(SAV_ID) AS FLOAT)
/ CAST(COUNT(DISTINCT DAT_JOUR) AS FLOAT)
AS MOYENNE_PAR_JOUR
FROM T_DAT D
LEFT OUTER JOIN T_SAV S
ON D.DAT_JOUR = S.SAV_DATE
WHERE DAT_JOUR BETWEEN '2007-02-19' AND '2007-02-23'

et donne :

MOYENNE_PAR_JOUR
-----------------------------------------------------
2.0

Pour implémenter un calendrier, lisez l'article que j'ai écrit à ce sujet :
http://sqlpro.developpez.com/cours/gestiontemps/

A +



Je n'ai aucune idée de comment commencer

Si vous pouvez m'aider ça serait gentil

Merci d'avance





--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************
Avatar
sonia
merci beaucoup

Je vais suivre ton conseil

On 25 fév, 21:34, Fred BROUARD wrote:
sonia a écrit :

> Bonjour,

> J'aimerais savoir si je peux faire une requette qui me donne le jour
> de la semaine
> sachant que j'ai une date sous forme aaaa/mm/jj hh:mm:ss

> En fait je dois faire des statistiques sur mes donnée
> selon les jours de la semaine et du weed end

Dans ce cas il est indispensable que votre base intègre une table des
dates. Sans cela le risque est important que vos statistiques soient
fausses. En effet si à un jour donné vous n'avez aucune entrée dans
votre table, ce jour ne sera pas comptabilisé.

Démonstration : Soit la table T_SAV d'un SAV qui admet des appareils à
réparer de la forme suivante :

CREATE TABLE T_SAV
(SAV_ID INT NOT NULL PRIMARY KEY,
SAV_APPAREIL VARCHAR(16),
SAV_DATE DATETIME)

Avec les données suivantes :

SET DATEFORMAT YMD
INSERT INTO T_SAV VALUES (1, 'TV', '2007-02-19')
INSERT INTO T_SAV VALUES (2, 'Radio', '2007-02-19')
INSERT INTO T_SAV VALUES (3, 'Four', '2007-02-20')
INSERT INTO T_SAV VALUES (4, 'TV', '2007-02-20')
INSERT INTO T_SAV VALUES (5, 'Frigo', '2007-02-20')
INSERT INTO T_SAV VALUES (6, 'Radio', '2007-02-22')
INSERT INTO T_SAV VALUES (7, 'TV', '2007-02-22')
INSERT INTO T_SAV VALUES (8, 'PC', '2007-02-22')
INSERT INTO T_SAV VALUES (9, 'Four', '2007-02-23')
INSERT INTO T_SAV VALUES (10,'TV', '2007-02-23')

Calculez le nombre moyen d'appareils traités par jour et pour la semaine
du 19 au 23 février.

La requête ci-dessous :

SELECT CAST(COUNT(*) AS FLOAT)
/ CAST(COUNT(DISTINCT SAV_DATE) AS FLOAT)
AS MOYENNE_PAR_JOUR
FROM T_SAV
WHERE SAV_DATE BETWEEN '2007-02-19' AND '2007-02-23'

MOYENNE_PAR_JOUR
-----------------------------------------------------
2.5

donne un résultat erroné... En effet il y a un jour dans lequel aucun
appareil n'a été pris en SAV.

Le seul moyen de donner un sens à cette requête est de projeter la ta ble
T_SAV sur une table "calendrier" comportant _toutes_ les dates.

Exemple :

CREATE TABLE T_DAT
(DAT_JOUR DATETIME NOT NULL PRIMARY KEY)

INSERT INTO T_DAT VALUES ('2007-02-18')
INSERT INTO T_DAT VALUES ('2007-02-19')
INSERT INTO T_DAT VALUES ('2007-02-20')
INSERT INTO T_DAT VALUES ('2007-02-21')
INSERT INTO T_DAT VALUES ('2007-02-22')
INSERT INTO T_DAT VALUES ('2007-02-23')
INSERT INTO T_DAT VALUES ('2007-02-24')

Dès lors la requête s'écrit :

SELECT CAST(COUNT(SAV_ID) AS FLOAT)
/ CAST(COUNT(DISTINCT DAT_JOUR) AS FLOAT)
AS MOYENNE_PAR_JOUR
FROM T_DAT D
LEFT OUTER JOIN T_SAV S
ON D.DAT_JOUR = S.SAV_DATE
WHERE DAT_JOUR BETWEEN '2007-02-19' AND '2007-02-23'

et donne :

MOYENNE_PAR_JOUR
-----------------------------------------------------
2.0

Pour implémenter un calendrier, lisez l'article que j'ai écrit à ce sujet :http://sqlpro.developpez.com/cours/gestiontemps/

A +



> Je n'ai aucune idée de comment commencer

> Si vous pouvez m'aider ça serait gentil

> Merci d'avance

--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langag e SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
*********************http://www.datasapiens.com***********************