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 :

Procédure stockée problème


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Développeur Web
    Inscrit en
    Janvier 2011
    Messages
    49
    Détails du profil
    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2011
    Messages : 49
    Par défaut Procédure stockée problème
    Bonjour, je dispose d'une table de la forme suivante:

    [Email] | [Client] | [Date]....

    ma procédure stockée doit avoir comme attribut deux dates et la valeur du client:
    @Datestart
    @Datestop
    @Customer

    Je voudrais récuperer l'ensemble des nouveaux clients pendant la période de date donnée.

    Sachant que chaque ligne de la table correspond à un enregistrement d'un telechargement ex:

    "email@mail1.com" | client 1 | 2011-06-06
    "email@mail2.com" | client 2 | 2011-05-04
    "email@mail1.com" | client1 | 2010-04-03
    ....
    ...
    L'adresse mail des clients apparait à chaque enregistrement d'un telechargement, et donc en gros, je souhaiterais avoir la liste des nouvelles adresses mails pendant la pèriode donnée et qui ne sont pas dans la table avec le même client. (par ex si adresse1 est déja présente mais avec le client2, elle compte quand même pour un nouveau client pour le client1)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select distinct([Email]), COUNT(*) AS NB from table
    where Customer= @Client
    and [Date]>@start AND [Date]<@end
    and [Email]<>(select distinct([Email]) from StatsArchived Where [Date]<@start)
    Group by [EMAIL]
    Order by NB desc;
    mais cela ne fonctionne pas.

  2. #2
    Membre Expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Par défaut
    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([Email]) as Email
    FROM TABLE A
    WHERE Customer= @Client
    AND A.[Date] BETWEEN @start AND @end
    AND NOT EXISTS
    (
       SELECT * 
       FROM TABLE B 
       WHERE Customer=@client 
          AND B.Email= A.Email 
          AND B.[Date]<@start
    )
    ORDER BY Email DESC

  3. #3
    Membre averti
    Développeur Web
    Inscrit en
    Janvier 2011
    Messages
    49
    Détails du profil
    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2011
    Messages : 49
    Par défaut
    Merci beaucoup, la procédure stockée fonctionne, mais elle est beaucoup trop longue (environ 30 seconde pour s'éxécuter). Je pense qu'il n'y a pas mieu de toutes façon a part modifié la table pour crée une colonne qui va dire si c'est le premier enregistrement ou non de cet utilisateur.
    Quand pensez vous? avez vous d'autre idée?

  4. #4
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Bonjour,

    vous pouvez créer un index pour accélérer la requête :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CREATE INDEX IX_NomIndex ON LaTable (Customer, [date], Email)


    Vous pouvez aussi essayer cette requête :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT Email
    FROM Table
    WHERE Customer = @Client
    GROUP BY Email
    HAVING MIN([date]) BETWEEN @Datestart AND  @Datestop

  5. #5
    Membre averti
    Développeur Web
    Inscrit en
    Janvier 2011
    Messages
    49
    Détails du profil
    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2011
    Messages : 49
    Par défaut
    Merci cela fonctionne. On m'a conseillé de faire cette requête avec un LEFT OUTER JOIN. Avez vous une idée de comment faire?

    Merci beaucoup pour toutes ces réponses.

  6. #6
    Membre averti
    Développeur Web
    Inscrit en
    Janvier 2011
    Messages
    49
    Détails du profil
    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2011
    Messages : 49
    Par défaut
    Pour le moment j'ai fait ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT [Email], MIN([date])
    	from Table A
    	Where Customer= @Customer
    	And A.[Date] BETWEEN @start AND @stop
    	Group By [Email]
    donc la, je récupère toutes les données comprises dans la période avec le client=@Customer, maintenant il faut que je fasse un "left outer join" pour enlever celle déjà présente avant cette période.

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

Discussions similaires

  1. Procédure stockée --> Problème de syntaxe
    Par skyline86 dans le forum Développement
    Réponses: 1
    Dernier message: 08/02/2010, 12h40
  2. Réponses: 10
    Dernier message: 25/05/2007, 15h21
  3. Réponses: 5
    Dernier message: 09/05/2005, 12h24
  4. Problème avec une procédure stockée
    Par in dans le forum Langage SQL
    Réponses: 4
    Dernier message: 27/05/2003, 15h33
  5. - [procédure stockée] - Problème de Somme
    Par korrigann dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 20/05/2003, 11h51

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