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

MS SQL Server Discussion :

Recherche de doublons par date


Sujet :

MS SQL Server

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2014
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 42
    Points : 35
    Points
    35
    Par défaut Recherche de doublons par date
    Bonjour tout le monde,

    j'ai besoin de faire ceci :
    Doublons concernant 2 demandes de devis faite avec même adresse email, la deuxieme demande ayant été réalisée entre 15 et 180 jours après la deuxiémé demande.

    C'est à dire que si on injecte des devis avec une adresse email et que cette même personne a fait une demande de devis entre 15 et 180 jours avant, on le staut en doublon.

    J'ai fait ceci :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT count(*)
    FROM Ma_table
    WHERE datediff(day,date_devis,getdate()) BETWEEN 15 AND 180
    and adresse_email = 'truc@truc.fr'

    Cette requête me renvoi bien un le nombre de jours mais je ne sais pas si elle correcte.

    Pouvez-vous m'aider ?

    Merci d'avance.

  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 917
    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 917
    Points : 51 693
    Points
    51 693
    Billets dans le blog
    6
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT adresse_email, count(*)
    FROM   Ma_table
    WHERE  datediff(day,date_devis,getdate()) BETWEEN 15 AND 180
    GROUP  BY adresse_email
    HAVING COUNT(*) > 1;
    et si vous voulez les détails:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    WITH T AS (
    SELECT adresse_email
    FROM   Ma_table
    WHERE  datediff(day,date_devis,getdate()) BETWEEN 15 AND 180
    GROUP  BY adresse_email
    HAVING COUNT(*) > 1)
    SELECT *
    FROM   Ma_table
    WHERE  datediff(day,date_devis,getdate()) BETWEEN 15 AND 180
      AND  adresse_email IN (SELECT * FROM T);
    A +

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2014
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 42
    Points : 35
    Points
    35
    Par défaut
    Merci de votre retour

    J ai un autre soucis :

    J'ai un champ date_devis qui est déclarée en varchar mais qui contient une date.

    Je dois me baser sur ce champ pour savoir si nous sommes bien entre 15 et 180 jours.

    Mais il me renvoit des dates qui sont du mois d'aout dernier. C'est à dire au dela des 180 jours.

    J'ai fait ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT *
    FROM maTable
    WHERE datediff(day,convert(Datetime,date_devis),getdate()) BETWEEN 15 AND 180
    et ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT *
    FROM maTable
    WHERE datediff(day,cast(date_devis as Datetime),getdate()) BETWEEN 15 AND 180
    Pouvez-vous m'aider ?

    Merci d'avance

  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 917
    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 917
    Points : 51 693
    Points
    51 693
    Billets dans le blog
    6
    Par défaut
    Mettre une date dans une chaine de caractères est d'une grande bêtise... Cela viole le principe même des SGBD Relationnels dont les données sont typées. Sinon, revenez à CoBOL !

    Pour répondre à votre question, il faudrit en sus :
    1) que nous ayons le format exact d e l'encodage de "date" de cette colonne
    2) de s'assurer qu'il n'existe aucune exception à cet encodage.

    A ces deux conditions, nous pourrons peut être vous aider, mais le mieux serait de transformer cette colonne du VARCHAR en DATE !

    A +

  5. #5
    Membre éprouvé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2009
    Messages
    623
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Août 2009
    Messages : 623
    Points : 1 049
    Points
    1 049
    Par défaut
    Que penses tu que Sql Server va renvoyer pour cette chaine ? '11/08/2013 00:00:00'
    D'après toi, comment va-t'il déterminer le mois ? Aout ou Novembre ?
    Il ne faut pas stocker des datetime en varchar.

Discussions similaires

  1. Doublons par date de naissance et sexe
    Par Noiram94 dans le forum SAS Base
    Réponses: 4
    Dernier message: 21/01/2014, 17h37
  2. Recherche de fichiers par dates en php
    Par essse dans le forum Langage
    Réponses: 3
    Dernier message: 24/02/2009, 11h59
  3. [debutant] Recherche de repertoire par date de dernieres connections
    Par cvid07 dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 07/11/2007, 16h07
  4. Rechercher un fichier par date de modif
    Par cellendhyll dans le forum Général Python
    Réponses: 19
    Dernier message: 27/05/2007, 17h58
  5. Moteur de recherche par date
    Par Prue dans le forum ASP
    Réponses: 17
    Dernier message: 27/08/2003, 16h07

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