IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement SQL Server Discussion :

[SQL2K][SQL] aide pour une requete


Sujet :

Développement SQL Server

  1. #1
    Membre éprouvé Avatar de graphicsxp
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    758
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Luxembourg

    Informations forums :
    Inscription : Avril 2004
    Messages : 758
    Points : 1 022
    Points
    1 022
    Par défaut [SQL2K][SQL] aide pour une requete
    Bonjour,

    Voici les champs qui nous interesse dans ma table:

    [{DateAnalysed, smalldatetime}, {Analysed, bit}]

    Je veux compter le nombre d'enregistrements pour chaque jour entre deux dates donnees, pour lesquels le champs Analysed vaut 1.

    Pour l'instant voici ce que j'ai fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT        DATEPART(d, DateAnalysed) AS Date, SUM(1) AS Adobe
    FROM            cdbAdobe.dbo.Cutting
    WHERE        (Analysed = 1) AND (DateAnalysed <= CONVERT(DATETIME, '10-01-2008 23:59:59', 102)) AND (DateAnalysed >= CONVERT(DATETIME, 
                             '10-10-2007 00:00:00', 102))
    GROUP BY DATEPART(d, DateAnalysed)
    ORDER BY DATEPART(d, DateAnalysed)
    Le probleme c'est que le resultat obtenu ne me convient pas. J'ai bien le total pour chaque jour mais je voudrais que les resultats retournes soient sous la forme 01/01/08 et sur toute la duree.

    Quelqu'un a la solution ?

    Pour indication voici le resultset obtenu :

    Date Adobe
    1 95
    2 244
    3 99
    4 93
    5 108
    6 100
    7 24
    8 66
    9 55
    10 125
    11 200
    12 157
    13 101
    14 147
    15 229
    16 83
    17 78
    18 206
    19 158
    20 70
    21 87
    22 141
    23 122
    24 50
    25 139
    26 186
    27 123
    28 288
    29 249
    30 253
    31 104

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 852
    Points : 52 992
    Points
    52 992
    Billets dans le blog
    6
    Par défaut
    Lisez les articles que nous écrivons sur le type DATETIME dans SQL Server !
    http://baptiste-wicht.developpez.com...-sql/datetime/

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT DATEPART(d, DateAnalysed) AS Date, 
           COUNT(*) AS Count_Analysed
    FROM   cdbAdobe.dbo.Cutting
    WHERE  Analysed = 1
      AND  DateAnalysed BETWEEN '20071010' AND '20080110 23:59:57'
    GROUP  BY DATEPART(d, DateAnalysed)
    ORDER  BY DATEPART(d, DateAnalysed)
    DATETIME est un type de données SQL au même titre qu'un entier ou une chaine de caractère. Un datetime n'est donc pas une chaine de caractères. Or vous demander que la présentation des dates soient faites sous la forme "01/01/08". Ce n'est pas possible. C'est l'outil client à travers lequel vous visualisez vos dates qui fait la présentation. C'est donc à lui qu'il convient d'exiger cette présentation !
    http://sqlpro.developpez.com/cours/sqlaz/erreurs/#L7

    A +

  3. #3
    Membre éprouvé Avatar de graphicsxp
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    758
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Luxembourg

    Informations forums :
    Inscription : Avril 2004
    Messages : 758
    Points : 1 022
    Points
    1 022
    Par défaut
    Merci pour votre réponse. Cependant le champs datetime peut tres bien etre casté en nvarchar afin de retourner les données dans le format désiré.

    Je ne pense pas que vous ayez cerné ou se trouvait mon problème. Plus que dans le formatage lui meme, c'est dans les données retournées qu'il y a un problème, en clair, ma requête est incorrecte.

    En effet je veux la somme des champs pour chaque jour entre les dates données. Or pour le moment ce que je retourne c'est la somme des champs pour chaque jour du mois (1-31) au lieu de chaque jour de chaque mois .

    Est-ce plus clair ?

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 852
    Points : 52 992
    Points
    52 992
    Billets dans le blog
    6
    Par défaut
    dans ce cas il faut que vous fassiez un produit cartésien de votre table avec une table des dates contenant tous les jours de tous les mois de toutes les années...

    Lisez l'aticle que j'ai écrit à ce sujet : http://sqlpro.developpez.com/cours/gestiontemps/

    A +

  5. #5
    Membre éprouvé Avatar de graphicsxp
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    758
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Luxembourg

    Informations forums :
    Inscription : Avril 2004
    Messages : 758
    Points : 1 022
    Points
    1 022
    Par défaut
    Creer une table qui contient toutes les dates me parait un peu fastidieux, surtout que la requete doit s'effectuer sur quelques dizaines de bases. Par contre je pense avoir trouve une solution adequate, la requete suivante fonctionne bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SELECT 
       dateadd(day, datediff(day, 0, DateAnalysed), 0) AS [Date], 
       count(*) AS Adobe 
    FROM 
       cdbAdobe.dbo.Cutting 
    WHERE 
       (Analysed = 1) 
       AND DateAnalysed >= '20071010' 
       AND DateAnalysed < '20081002' 
    GROUP BY 
       dateadd(day, datediff(day, 0, DateAnalysed), 0) 
    ORDER BY 
       [Date] 
    GO

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SQL2K][SQL] aide pour une requete
    Par graphicsxp dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 21/02/2008, 14h36
  2. Besoin d'aide pour une requete SQL
    Par fabris dans le forum Requêtes
    Réponses: 15
    Dernier message: 02/05/2006, 17h03
  3. Besoin d'aide pour une requete SQL
    Par fabris dans le forum Requêtes
    Réponses: 6
    Dernier message: 10/04/2006, 20h27
  4. Aide pour une requete SQL
    Par hpghost dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 08/01/2005, 15h01
  5. Aide pour une requete SQL
    Par hpghost dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 08/01/2005, 10h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo