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

Langage SQL Discussion :

Select 2 COUNT BETWEEN 2 Date


Sujet :

Langage SQL

  1. #1
    Membre habitué Avatar de aliwassem
    Inscrit en
    Janvier 2004
    Messages
    293
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 293
    Points : 157
    Points
    157
    Par défaut Select 2 COUNT BETWEEN 2 Date
    salut

    je travaille avec delphi et SQL et j'ai un probleme

    dans un tableau USER(user,Number,date,time) alors je veux selectionner les suivants :

    COUNT of user BETWEEN deux date et < a certain time
    COUNT of user BETWEEN deux date et > a certain time - le meme date-

    et bien sur dans le meme Quary..........

    merci d'avance

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 71
    Points : 59
    Points
    59
    Par défaut
    c'est pas très élégant, mais on doit pourvoir faire une requête du style :

    SELECT
    (SELECT COUNT(*) FROM user WHERE condition1) AS cpt1,
    (SELECT COUNT(*) FROM user WHERE condition2) AS cpt2

    condition1 : prend en compte la première première période
    condition2 ! pernd en compte la 2eme periode


    ou bien aussi :
    SELECT COUNT(*) as cpt1, 0 as cpt2 FROM user WHERE condition1
    UNION
    SELECT 0 as cpt1, COUNT(*) as cpt2 FROM user WHERE condition2

    je ne sais pas si çà répond à ta question...

  3. #3
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 280
    Points : 11 736
    Points
    11 736
    Par défaut
    Plus élégant alors :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT SUM(CASE WHEN condition1 THEN 1 ELSE 0 END) as cpt1,
       SUM(CASE WHEN condition2 THEN 1 ELSE 0 END) as cpt2
    FROM ...
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  4. #4
    Membre actif Avatar de Chen norris
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Mai 2004
    Messages : 216
    Points : 248
    Points
    248
    Par défaut
    Allez, une autre proposition :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT COUNT (*)
    FROM USER
    WHERE user IN (SELECT user
              FROM USER
              WHERE date BETWEEN date_1 AND date_2 AND
                        (time < certain_time_a OR time > certain_time_b));
    Chen norris
    C/C++, C#, Java, PHP & SQL coder
    Web developer

  5. #5
    Membre habitué Avatar de aliwassem
    Inscrit en
    Janvier 2004
    Messages
    293
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 293
    Points : 157
    Points
    157
    Par défaut
    Citation Envoyé par patdez
    c'est pas très élégant, mais on doit pourvoir faire une requête du style :

    SELECT
    (SELECT COUNT(*) FROM user WHERE condition1) AS cpt1,
    (SELECT COUNT(*) FROM user WHERE condition2) AS cpt2

    condition1 : prend en compte la première première période
    condition2 ! pernd en compte la 2eme periode


    ou bien aussi :
    SELECT COUNT(*) as cpt1, 0 as cpt2 FROM user WHERE condition1
    UNION
    SELECT 0 as cpt1, COUNT(*) as cpt2 FROM user WHERE condition2

    je ne sais pas si çà répond à ta question...
    j'ai essai avec ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT 
    (SELECT Users.UserName,COUNT(Users.UserName) FROM "Users.DB" Users 
    WHERE   History.LogTime > '12:00:00') AS cpt1,
    (SELECT History.CardNo,COUNT(History.CardNo) FROM  "History.DB" History 
    WHERE   History.LogTime < '08:00:00') AS cpt2
    GROUP BY  Users.UserName,History.CardNo
    ORDER BY Users.UserName
    et je trouve une erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Invalid use of keyword.
    Token: GROUP
    Line Number: 6
    .................................................................................................
    pour la 2eme (UNION) c'est pas qu'est ce que je veux


    Pour les deux tableaux que je l'ai comme suivants:
    Users
    UserNo-------CardNo-------UserName
    -------------------------------------
    --1----------0000001------ aliwassem

    History
    HistoryNo-------CardNo-------LDate-----------LTime
    ------------------------------------------------
    --1------------000001--------12122007-------080000
    --2------------000001--------12122007-------082020
    --3------------000001--------12122007-------101220
    --4------------000001--------12122007-------113020
    --5------------000001--------12122007-------123020

    et Exactement je veux la resultat de mon Query comme suivant:

    UserName-------CardNo--------Cpt1-------Cpt2
    ----------------------------------------------
    aliwassem-------000001---------2--------- 2
    -------------------------------------------------------
    Si dans mon Query je fait
    WHERE LTime >101220 le 1er COUNT Cpt1
    WHERE LTime <101220 le 2em COUNT Cpt2


    alors voila qu'est ce que je veux ? je pense maintenant c'est clair......

    Merci aussi

  6. #6
    Membre actif Avatar de Chen norris
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Mai 2004
    Messages : 216
    Points : 248
    Points
    248
    Par défaut
    Citation Envoyé par aliwassem
    j'ai essai avec ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT 
    (SELECT Users.UserName,COUNT(Users.UserName) FROM "Users.DB" Users 
    WHERE   History.LogTime > '12:00:00') AS cpt1,
    (SELECT History.CardNo,COUNT(History.CardNo) FROM  "History.DB" History 
    WHERE   History.LogTime < '08:00:00') AS cpt2
    GROUP BY  Users.UserName,History.CardNo
    ORDER BY Users.UserName
    et je trouve une erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Invalid use of keyword.
    Token: GROUP
    Line Number: 6
    ...
    Je pense plutôt qu'il faudrait que tu fasses un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SELECT UserName, CardNo, 
          (SELECT COUNT(*) AS Cpt1
           FROM History INNER JOIN Users ON History.CardNo = Users.CardNo
           WHERE LTime > 'certain_temps_a'),
          (SELECT COUNT(*) AS Cpt2
           FROM History INNER JOIN Users ON History.cCardNo = Users.CardNo
           WHERE LTime < 'certain_temps_b')
    FROM History INNER JOIN Users ON History.CardNo = Users.CardNo;
    Chen norris
    C/C++, C#, Java, PHP & SQL coder
    Web developer

  7. #7
    Membre habitué Avatar de aliwassem
    Inscrit en
    Janvier 2004
    Messages
    293
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 293
    Points : 157
    Points
    157
    Par défaut
    Citation Envoyé par Chen norris
    Je pense plutôt qu'il faudrait que tu fasses un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SELECT UserName, CardNo, 
          (SELECT COUNT(*) AS Cpt1
           FROM History INNER JOIN Users ON History.CardNo = Users.CardNo
           WHERE LTime > 'certain_temps_a'),
          (SELECT COUNT(*) AS Cpt2
           FROM History INNER JOIN Users ON History.cCardNo = Users.CardNo
           WHERE LTime < 'certain_temps_b')
    FROM History INNER JOIN Users ON History.CardNo = Users.CardNo;

    Salut

    j'essai avec ce code C'est le meme que vous me donnez avec un DISTINCT

    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 Distinct
      Users.UserName,
      History.CardNo,
      (Select
        Count(History.CardNo)
      From
        History, Users
      Where
        History.State = 6 And
        (History.CardNo = Users.CardNo))
    From
      Users, History
    Where
      (History.CardNo = Users.CardNo)
    Mais ca marche pas (il ne me donne qu'est ce que je veux)

    et voila une image pour ca

  8. #8
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    La solution d'Antoun me parraissait très bien, pourquoi tu ne l'utilises pas ?

  9. #9
    Membre habitué Avatar de aliwassem
    Inscrit en
    Janvier 2004
    Messages
    293
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 293
    Points : 157
    Points
    157
    Par défaut
    Citation Envoyé par Tofalu
    La solution d'Antoun me parraissait très bien, pourquoi tu ne l'utilises pas ?
    je sais pas exactement je comprende pas qu'est ce qu'il veut dire le code d'Antoun .

  10. #10
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 280
    Points : 11 736
    Points
    11 736
    Par défaut
    En toute impartialité, je trouve aussi que ma solution est très bien

    L'idée de ma requête est de compter 1 à chaque fois que la condition est remplie, 0 sinon, et de faire le total.

    Est-ce que tu ne connais pas les CASE WHEN, ou bien est-ce que tu ne sais pas comment rédiger tes conditions ?
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  11. #11
    Membre habitué Avatar de aliwassem
    Inscrit en
    Janvier 2004
    Messages
    293
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 293
    Points : 157
    Points
    157
    Par défaut
    Citation Envoyé par Antoun
    En toute impartialité, je trouve aussi que ma solution est très bien

    L'idée de ma requête est de compter 1 à chaque fois que la condition est remplie, 0 sinon, et de faire le total.

    Est-ce que tu ne connais pas les CASE WHEN, ou bien est-ce que tu ne sais pas comment rédiger tes conditions ?
    Voila Qu'est ce que j'ai fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT SUM(CASE (History.CardNo) WHEN (History.State =6) THEN 1 ELSE 0 END) AS cpt1,
       SUM(CASE (History.CardNo) WHEN (History.State <6) THEN 1 ELSE 0 END) AS cpt2
    FROM History
    Mais il me donne une erreur Chez le mot WHEN je sais pas exact ou'il est le probleme et pour moi c'est la premiere fois j'utilise (CASE WHEN)

    je sais pas comment je doit faire ?

  12. #12
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Quel est ton SGBD ?

  13. #13
    Membre habitué Avatar de aliwassem
    Inscrit en
    Janvier 2004
    Messages
    293
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 293
    Points : 157
    Points
    157
    Par défaut
    Citation Envoyé par Tofalu
    Quel est ton SGBD ?
    je sais pas et comment je peux connaitre quel est mon SGBD ?

  14. #14
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 280
    Points : 11 736
    Points
    11 736
    Par défaut
    (History.CardNo) n'a rien à faire dans le CASE.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT History.CardNo,
      SUM(CASE WHEN History.State =6 THEN 1 ELSE 0 END) AS cpt1,
       SUM(CASE WHEN History.State <6 THEN 1 ELSE 0 END) AS cpt2
    FROM History
    Quand à ton SGBD, tu es censé le connaître... d'après les copies écran, j'aurais dit SQL Server, mais ça peut être trompeur...
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  15. #15
    Membre habitué Avatar de aliwassem
    Inscrit en
    Janvier 2004
    Messages
    293
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 293
    Points : 157
    Points
    157
    Par défaut
    Citation Envoyé par Antoun
    (History.CardNo) n'a rien à faire dans le CASE.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT History.CardNo,
      SUM(CASE WHEN History.State =6 THEN 1 ELSE 0 END) AS cpt1,
       SUM(CASE WHEN History.State <6 THEN 1 ELSE 0 END) AS cpt2
    FROM History
    Quand à ton SGBD, tu es censé le connaître... d'après les copies écran, j'aurais dit SQL Server, mais ça peut être trompeur...
    C'est la meme chose toujours je le fais mais ca marche pas il me donne une erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Invalid use of keyword.
    Token: When

  16. #16
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 280
    Points : 11 736
    Points
    11 736
    Par défaut
    Il te manque le GROUP BY :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT History.CardNo,
      SUM(CASE WHEN History.State =6 THEN 1 ELSE 0 END) AS cpt1,
       SUM(CASE WHEN History.State <6 THEN 1 ELSE 0 END) AS cpt2
    FROM History 
    GROUP BY History.CardNo ;
    Quant à ton Système de Gestion de Base de Données, je suis presque sûr que tu le connais... SQL Server ? Oracle ? MySQL ? Sybase ? PostGreSQL ?...

    Si vraiment tu ne sais pas, qu'y a-t-il d'écrit en haut des fenêtres sur lesquelles tu passes tes requêtes ? Entreprise Manager ? Toad ? SQLyog ?...
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  17. #17
    Membre habitué Avatar de aliwassem
    Inscrit en
    Janvier 2004
    Messages
    293
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 293
    Points : 157
    Points
    157
    Par défaut
    Citation Envoyé par Antoun
    Il te manque le GROUP BY :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT History.CardNo,
      SUM(CASE WHEN History.State =6 THEN 1 ELSE 0 END) AS cpt1,
       SUM(CASE WHEN History.State <6 THEN 1 ELSE 0 END) AS cpt2
    FROM History 
    GROUP BY History.CardNo ;
    Quant à ton Système de Gestion de Base de Données, je suis presque sûr que tu le connais... SQL Server ? Oracle ? MySQL ? Sybase ? PostGreSQL ?...

    Si vraiment tu ne sais pas, qu'y a-t-il d'écrit en haut des fenêtres sur lesquelles tu passes tes requêtes ? Entreprise Manager ? Toad ? SQLyog ?...
    Salut
    c'est la meme chose le meme erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Invalid use of keyword.
    Token: When
    et pour SGBD pour moi j'utilise un SQL Builder avec Delphi Ca qu'est ce que je l'ai...........

  18. #18
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 280
    Points : 11 736
    Points
    11 736
    Par défaut
    Citation Envoyé par aliwassem
    et pour SGBD pour moi j'utilise un SQL Builder avec Delphi Ca qu'est ce que je l'ai...........
    ça ne me dit rien... c'est difficile de trouver la bonne syntaxe sans connaître ton SGBD...

    à tout hasard, essaie les requêtes suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    SELECT History.CardNo,
      SUM((History.State =6)) AS cpt1,
       SUM((History.State <6 )) AS cpt2
    FROM History 
    GROUP BY History.CardNo ;
     
    SELECT History.CardNo,
      SUM(IF(History.State = 6, 1, 0)) AS cpt1,
      SUM(IF(History.State > 6, 1, 0)) AS cpt2
    FROM History 
    GROUP BY History.CardNo ;
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  19. #19
    Membre habitué Avatar de aliwassem
    Inscrit en
    Janvier 2004
    Messages
    293
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 293
    Points : 157
    Points
    157
    Par défaut
    Citation Envoyé par Antoun
    ça ne me dit rien... c'est difficile de trouver la bonne syntaxe sans connaître ton SGBD...
    comment je peux le connaitre ?
    Citation Envoyé par Antoun
    à tout hasard, essaie les requêtes suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    SELECT History.CardNo,
      SUM((History.State =6)) AS cpt1,
       SUM((History.State <6 )) AS cpt2
    FROM History 
    GROUP BY History.CardNo ;
     
    SELECT History.CardNo,
      SUM(IF(History.State = 6, 1, 0)) AS cpt1,
      SUM(IF(History.State > 6, 1, 0)) AS cpt2
    FROM History 
    GROUP BY History.CardNo ;
    J'arrive pas j'ai aussi des erreurs

  20. #20
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 280
    Points : 11 736
    Points
    11 736
    Par défaut
    Citation Envoyé par aliwassem
    comment je peux le connaitre ?
    à quoi ressemble l'endroit où tu paramètres la connexion à ta base de données ?
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

Discussions similaires

  1. Erreur SQl pour select count avec critere date
    Par fdalyon dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 10/05/2010, 19h50
  2. Update, select et count
    Par dbuweb dans le forum Requêtes
    Réponses: 2
    Dernier message: 21/06/2006, 16h11
  3. [MySQL] SELECTION DE TEMPS ENTRE 2 DATES
    Par oceane751 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 14/04/2006, 01h54
  4. Requête selection avec une variable de date
    Par kahmsin dans le forum Access
    Réponses: 7
    Dernier message: 20/11/2005, 19h38
  5. COUNT + Calcul de DATE
    Par cassi2 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 28/10/2004, 16h35

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