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 :

Requête SQL sur date


Sujet :

Développement SQL Server

  1. #1
    Membre du Club
    Homme Profil pro
    PartNumber
    Inscrit en
    Octobre 2012
    Messages
    309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : PartNumber
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2012
    Messages : 309
    Points : 65
    Points
    65
    Par défaut Requête SQL sur date
    Bonjour
    je rame sur une requête et j'aurais besoin de vos lumières svp.
    Au fait j'ai une table production avec les champs et notamment un champ date, je souhaite extraire toutes les données en faisant un filtre sur la date, en claire toutes les lignes de moins de 4 mois par rapport à la date du jour
    j'ai essayé avec between mais ca marche pas.
    merci bcp

  2. #2
    Invité
    Invité(e)
    Par défaut
    Pourrais-tu fournir ce que tu as fait, parce que là, ça va être difficile de deviner pourquoi tu n'y arrives pas. Il y a une charte de postage qui est dans ma signature qui pourrait t'aider à avoir des réponses constructives...

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 770
    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 770
    Points : 52 723
    Points
    52 723
    Billets dans le blog
    5
    Par défaut
    Postez votre requête !

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  4. #4
    Membre éclairé Avatar de Bernardos
    Homme Profil pro
    Consultant Senior dba sql server & Microsoft Business Intelligence
    Inscrit en
    Avril 2008
    Messages
    332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant Senior dba sql server & Microsoft Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 332
    Points : 723
    Points
    723
    Par défaut
    et Le script ddl de création de cette fameuse table.
    Cordialement,
    Loïc BERNARD
    Consultant Senior dba sql server & Microsoft Business Intelligence



    Il n'y a jamais de problèmes, il n'y a que des solutions!

  5. #5
    Membre du Club
    Homme Profil pro
    PartNumber
    Inscrit en
    Octobre 2012
    Messages
    309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : PartNumber
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2012
    Messages : 309
    Points : 65
    Points
    65
    Par défaut Merci
    Merci pour vos retours, désolé.
    pour la partie requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select * from Production where date < 400  and date <  SYSDATETIME ()
    select * from Production where date between  SYSDATETIME () and SYSDATETIME ()
    pour la partie Creation Table :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    CREATE TABLE [dbo].[Production] (
        [SERIALNUMBER]          CHAR (17)      NULL,
        [PARTNUMBER]            CHAR (12)      NULL,
        [DATE]                  DATETIME       NULL,
        [HEURE]                 DATETIME       NULL,
        [TEST_STATION]          CHAR (50)      NULL,
        [TEST_SOFTWARE_VERSION] CHAR (16)      NULL,
        [DATABASE_VERSION]      CHAR (3)       NULL,
        [SERIALNUMBER_CI]       CHAR (17)      NULL,
        [SOFTWARE_VERSION]      CHAR (40)      NULL,
        [OPERATOR]              CHAR (16)      NULL,
        [DIE_NUMBER]            CHAR (16)      NULL,
        [OF_NUMBER]             CHAR (12)      NULL,
        [OPTION1]               NVARCHAR (50)  NULL,
        [OPTION2]               NVARCHAR (50)  NULL,
        [OPTION3]               NVARCHAR (50)  NULL,
        [OPTION4]               NVARCHAR (50)  NULL,
        [OPTION5]               NVARCHAR (50)  NULL,
        [OPTION6]               NVARCHAR (50)  NULL,
        [OPTION7]               NVARCHAR (50)  NULL,
        [OPTION8]               NVARCHAR (50)  NULL,
        [OPTION9]               NVARCHAR (50)  NULL,
        [OPTION10]              NVARCHAR (50)  NULL,
        [MAC_ADDRESS1]          CHAR (12)      NULL,
        [MAC_ADDRESS2]          CHAR (12)      NULL,
        [AUTOID]                INT            IDENTITY (1, 1) NOT NULL,
        [DATABASE]              NVARCHAR (200) NULL
    );
    Merci a vous, le champ qui m’intéresse est le Champs DATE

    Merci

  6. #6
    Expert éminent
    Avatar de Lyche
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2007
    Messages
    2 523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 523
    Points : 6 775
    Points
    6 775
    Billets dans le blog
    4
    Par défaut
    Pour commencer, le modèle de la table est bancale.
    Pourquoi ne pas avoir géré une table d'option et un association entre les options et la production.. chacune de vos production n'aura pas forcément les 10 options. Certaines de vos requêtes vont être particulièrement sales à gérer les différentes combinaisons d'options, pleines de OR, pleines de case when et d'autres fonctions coûteuses en termes de performances.


    Pour la première requête, que représente ce 400? vous interrogez une date qui possède un format particulier avec un numérique.. pensez vous que le SGBD va comprendre le besoin?

    Ensuite, pour la 2ème requête, vous faites un between sysdate() et sysdate(). Ce qui veux dire que vous n'avez pas d'intervalle de recherche. Il ne peut donc pas y avoir de retour possible.


    Je ne parle pas des typages de champs, je ne sais pas ce que vous stockez, mais je pense qu'il y a moyen de faire mieux de ce côté aussi.

    Cordialement,
    Rejoignez la communauté du chat et partagez vos connaissances ou vos questions avec nous

    Mon Tutoriel pour apprendre les Agregations
    Consultez mon Blog SQL destiné aux débutants

    Pensez à FAQ SQL Server Ainsi qu'aux Cours et Tuto SQL Server

  7. #7
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 801
    Points
    30 801
    Par défaut
    Par ailleurs, c'est une très mauvaise idée d'utiliser des mots réservé du langage (tel que DATE) pour nommer un objet de a base de données.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  8. #8
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 770
    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 770
    Points : 52 723
    Points
    52 723
    Billets dans le blog
    5
    Par défaut
    En dehors du modèle totalement catastrophique (une SGBDR n'est pas un tableur et une table n'est ps une feuille excel...) vos requêtes n'ont rien avoir avec une quelconque logique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from Production where date < 400  and date <  SYSDATETIME ()
    Une date n'étant pas un nombre et vice versa ce que vous avez écrit dans ce membre de prédicat date < 400 n'a aucun sens !!!
    Vous devez comparer une date à une autre date !
    Si vous voulez toutes les informations depuis les 4 dernier mois, il faut utiliser la date courante et y retirer 4 mois, ce qui se fait comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DATEADD(month, -4, CURRENT_TIMESTAMP)
    Et au final votre requête est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from Production where date BETWEEN DATEADD(month, -4, CURRENT_TIMESTAMP) AND CURRENT_TIMESTAMP
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from Production where date between  SYSDATETIME () and SYSDATETIME ()
    Celle-ci est assez absurde car elle dit : ttrouve moi tous les machins dont la date est entre la date courante et la date courante...
    Franchement pas terrible et j'ignore ce que vous voulez obtenir avec un tel non sens !

    Formez vous au langage sql... Mon site comme mon bouquin vous serait sans doute d'une grande utilité :
    Nom : Couverture SQL Synthex 4e ed - 500.jpg
Affichages : 2700
Taille : 77,8 Ko

    Il y aurait enfin beaucoup de choses à dire sur les types utilisés. Par exemple qu'une adresse MAC c'est du binaire en non du CHAR, donc BINARY et non CHAR(12), qu'un nom de base, comme tout identifiant SQL c'est de type sysname, qu'une date exige le type DATE et non DATETIME qui d'ailleurs est obsolète depuis la version 2008 de SQL Server et qu'une heure c'est le type TIME !

    Formez vous aussi à Sql Server et pour cela notre livre peut aussi vous y aider :
    Nom : Couverture livre SQL server Eyrolles.jpg
Affichages : 2707
Taille : 105,0 Ko

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  9. #9
    Membre du Club
    Homme Profil pro
    PartNumber
    Inscrit en
    Octobre 2012
    Messages
    309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : PartNumber
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2012
    Messages : 309
    Points : 65
    Points
    65
    Par défaut Merci
    Merci pour votre soutien j'ai réussi a trouver la requete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT 'Mois', DATEADD(MONTH,-4,DATE) from Production
    elle est simple mais bon !!!!!
    Une autre question, j'aimerai faire un select entre 2 base de données qui sont sur le meme serveur, les deux bases ont une colonne en commun. Par contre j'ai des erreurs ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Production.PARTNUMBER
    FROM Production.Production t1
    INNER JOIN DieNumbersStorage.DieProducts t2 ON DieProducts.PartNumber = Production.PARTNUMBER
    une idée svp

  10. #10
    Membre éclairé Avatar de Bernardos
    Homme Profil pro
    Consultant Senior dba sql server & Microsoft Business Intelligence
    Inscrit en
    Avril 2008
    Messages
    332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant Senior dba sql server & Microsoft Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 332
    Points : 723
    Points
    723
    Par défaut
    Pour commencer, le modèle de la table est bancale.
    heuh, t'es gentil toi. moi je dis beurk! c'est vraiment très mauvais!
    entre le datetime qui doit être un datetime2, les nvarchar(50), le champ date qui ne devrait pas s'appeler ainsi, les options et les macadress qui devraient être sorties de la table...enfin bref, ca ressemble à rien!


    Ceci dit je vais répondre à la simple question qui était comment obtenir toutes les lignes dans les 4 mois précédents.
    j'ai tout de même une question c'est quoi 4 mois? Imagine on est le 12/10/2016?
    • du 12/06/2016 à aujourd'hui
    • du 01/06/2016 à aujourd'hui
    • du 01/06/2016 au 31/09/2016
    • autre :


    voici une solution très simple
    Select * from Production where [date] > dateadd(month,-4,sysdatetime())
    Cordialement,
    Loïc BERNARD
    Consultant Senior dba sql server & Microsoft Business Intelligence



    Il n'y a jamais de problèmes, il n'y a que des solutions!

  11. #11
    Expert éminent
    Avatar de Lyche
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2007
    Messages
    2 523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 523
    Points : 6 775
    Points
    6 775
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par Bernardos Voir le message
    heuh, t'es gentil toi. moi je dis beurk! c'est vraiment très mauvais!
    entre le datetime qui doit être un datetime2, les nvarchar(50), le champ date qui ne devrait pas s'appeler ainsi, les options et les macadress qui devraient être sorties de la table...enfin bref, ca ressemble à rien!


    Ceci dit je vais répondre à la simple question qui était comment obtenir toutes les lignes dans les 4 mois précédents.
    j'ai tout de même une question c'est quoi 4 mois? Imagine on est le 12/10/2016?
    • du 12/06/2016 à aujourd'hui
    • du 01/06/2016 à aujourd'hui
    • du 01/06/2016 au 31/09/2016
    • autre :


    voici une solution très simple

    Cordialement,
    En effet, je suis gentil, j'essaye de ne pas étriper les gens dès qu'ils font des erreurs parce qu'ils le prennent mal et que globalement j'ai plus de résultat à leur conseiller les bonnes pratiques qu'en leurs disant qu'ils font de la merde
    Rejoignez la communauté du chat et partagez vos connaissances ou vos questions avec nous

    Mon Tutoriel pour apprendre les Agregations
    Consultez mon Blog SQL destiné aux débutants

    Pensez à FAQ SQL Server Ainsi qu'aux Cours et Tuto SQL Server

  12. #12
    Membre du Club
    Homme Profil pro
    PartNumber
    Inscrit en
    Octobre 2012
    Messages
    309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : PartNumber
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2012
    Messages : 309
    Points : 65
    Points
    65
    Par défaut Merci pour tous
    Pour ma dernière question j'ai pu trouver une solution
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT DieNumbersStorage.dbo.DieDefinitions.Name,DieNumbersStorage.dbo.DieProducts.Id,DieNumbersStorage.dbo.DieProducts.PartNumber,DieNumbersStorage.dbo.DieDefinitions.Maximum - DieNumbersStorage.dbo.DieDefinitions.LastValue as Cpt
    FROM DieNumbersStorage.dbo.DieProducts,DieNumbersStorage.dbo.DieDefinitions
    WHERE DieNumbersStorage.dbo.DieProducts.PartNumber LIKE '%C' 
    AND DieNumbersStorage.dbo.DieDefinitions.Id = DieNumbersStorage.dbo.DieProducts.FKDieDefinition
    AND DieNumbersStorage.dbo.DieProducts.PartNumber 
    		 in (
    						SELECT Production.dbo.Production.PARTNUMBER 
    						FROM Production.dbo.Production 
    						WHERE Production.dbo.Production.PARTNUMBER = DieNumbersStorage.dbo.DieProducts.PartNumber
    						AND Production.dbo.Production.date BETWEEN DATEADD(month, -3, CURRENT_TIMESTAMP) AND CURRENT_TIMESTAMP
    					 )
    Merci pour le soutien et je réitère mes propos vis à vis @Bernardos, l'aide et le soutien se font dans le respect de chacun et les écarts de langages ne sont pas ma tasse de thé.
    Merci en tout cas

  13. #13
    Membre éclairé Avatar de Bernardos
    Homme Profil pro
    Consultant Senior dba sql server & Microsoft Business Intelligence
    Inscrit en
    Avril 2008
    Messages
    332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant Senior dba sql server & Microsoft Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 332
    Points : 723
    Points
    723
    Par défaut
    Bonsoir,
    comme déjà répondu en MP, je ne vois pas en quoi j'aurais pu te manquer de respect en disant
    moi je dis beurk! c'est vraiment très mauvais!
    et
    enfin bref, ca ressemble à rien!
    Je n'ai pas dit que tu étais très mauvais. Comme dit en MP, je ne me permet pas de te juger, d'autant plus que je ne connais pas le contexte.
    Contexte que tu m'as précisé, à savoir, tu as été débarqué sur un projet déjà en cours.


    Je te repose alors la question :"As tu le droit de modifier ou de faire modifier le schéma de ta/tes bases?" Si oui, tu as le forum schéma sur lequel peux poster ton mcd ou mpd, pour qu'on puisse te donner un avis global des améliorations à apporter.


    Quant à ta reqtete,
    les jointures ne se font pas dans la clause where mais dans la clause inner join(ou left outer join ou right outer join) depuis au moins 10 ans.

    en fait ta requete initiale

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Production.PARTNUMBER
    FROM Production.Production t1
    INNER JOIN DieNumbersStorage.DieProducts t2 ON DieProducts.PartNumber = Production.PARTNUMBER
    Corrigée comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT t1.PARTNUMBER
    FROM Production.Production as t1
    INNER JOIN DieNumbersStorage.DieProducts as t2 ON t2.PartNumber = t1.PARTNUMBER
    devrait fonctionner.
    Cordialement,
    Loïc BERNARD
    Consultant Senior dba sql server & Microsoft Business Intelligence



    Il n'y a jamais de problèmes, il n'y a que des solutions!

Discussions similaires

  1. Requête SQL sur champ DATE
    Par SIADIDL dans le forum SQL
    Réponses: 10
    Dernier message: 13/05/2014, 08h28
  2. Une requête SQL sur 2 Dates
    Par souminet dans le forum Bases de données
    Réponses: 5
    Dernier message: 14/05/2008, 20h29
  3. Requête SQL sur une base Access, where sur un champ date
    Par digital prophecy dans le forum Bases de données
    Réponses: 1
    Dernier message: 09/05/2008, 16h47
  4. [CR ?] requête SQL sur une date
    Par czezko dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 23/04/2008, 10h25
  5. A propos d'une requête SQL sur plusieurs tables...
    Par ylebihan dans le forum Langage SQL
    Réponses: 2
    Dernier message: 14/09/2003, 16h26

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