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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de aliwassem
    Inscrit en
    Janvier 2004
    Messages
    293
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 293
    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 confirmé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 71
    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 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 288
    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 ...

  4. #4
    Membre confirmé 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 : 40
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Mai 2004
    Messages : 216
    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));

  5. #5
    Membre éclairé Avatar de aliwassem
    Inscrit en
    Janvier 2004
    Messages
    293
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 293
    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 confirmé 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 : 40
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Mai 2004
    Messages : 216
    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;

  7. #7
    Membre éclairé Avatar de aliwassem
    Inscrit en
    Janvier 2004
    Messages
    293
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 293
    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

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

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

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

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